bash ждать запуска службы

У меня проблемы с первой частью сценария bash, Мне нужно дождаться запуска сервера mysql перед выполнением команд mysqadmin ... Я не могу заставить его работать!

#!/bin/bash

if [[ ! -f /var/lib/mysql/status.secured ]]; then
  echo "MariaDB -> secure"
  #
  /usr/sbin/service mysql start
  while "$(mysql -u root -e "select 1")" -ne 1; do
    sleep 1
  done
  #
  mysqladmin -u root password "$MARIA_ROOT_PASSWORD"
  mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "UPDATE mysql.user SET Password=PASSWORD('$MARIA_ROOT_PASSWORD') WHERE User='root'"
  mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
  mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "DELETE FROM mysql.user WHERE User=''"
  mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
  mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "FLUSH PRIVILEGES"
  touch /var/lib/mysql/status.secured
  #
  /usr/sbin/service mysql stop
  while [[ "$(/usr/sbin/service mysql status)" != " * MariaDB is stopped." ]]; do
    sleep 1
  done
  echo "MariaDB -> secured"
fi

Это контейнер докеров на основе ubuntu, phusion / baseimage

1
задан 30 July 2016 в 01:40
1 ответ

Я думаю, что это сработает:

#!/bin/bash

if [[ ! -f /var/lib/mysql/status.secured ]]; then
  echo "MariaDB -> secure"
  #
  /usr/sbin/service mysql start
  #give up if not started in 2min
  if mysqladmin --wait=120 -u root password "$MARIA_ROOT_PASSWORD"; then
    mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "UPDATE mysql.user SET Password=PASSWORD('$MARIA_ROOT_PASSWORD') WHERE User='root'"
    mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
    mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "DELETE FROM mysql.user WHERE User=''"
    mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
    mysql -u root -p"$MARIA_ROOT_PASSWORD" -e "FLUSH PRIVILEGES"
    touch /var/lib/mysql/status.secured
    /usr/sbin/service mysql stop
    while [[ "$(/usr/sbin/service mysql status)" != " * MariaDB is stopped." ]]; do
      sleep 1
    done
    echo "MariaDB -> secured"
  else
    echo Gave up waiting for mysqld to respond
    /usr/sbin/service mysql stop
  fi

fi
0
ответ дан 4 December 2019 в 06:03

Теги

Похожие вопросы