twitter facebook

mysql や apache が落ちた場合に自動起動するcronとsh

サーバー自体は動作しているけど、mysql だけがSTOPしたとか1年に1回ぐらいあったのでその対策です。centosです。
まずは ルートユーザー(root) になって
root ユーザーで
crontab -e
以下のような感じで cron に追加
crontab -e
# 毎分 auto_start.sh の スクリプトを起動 (xxxは適当)
* * * * * /bin/sh /xxx/auto_start.sh
/xxx/auto_start.sh の中身は以下です。
/xxxxx/auto_start.sh
#!/bin/sh

n=`ps -ef | grep mysqld | grep -v grep | wc -l`
if [ $n = 0 ]; then
        sudo service mysqld start
fi

n=`ps -ef | grep httpd | grep -v grep | wc -l`
if [ $n = 0 ]; then
        sudo service httpd start
fi
簡単に説明をすると

ps -ef は 起動しているプロセス一覧
grep mysqld は 上記から mysqld を抽出
grep -v grep は さらに grep が含まれている場合は除外
wc -l は 行数

そして 0 件なら 起動実行する。
起動コマンドは
service mysqld start なり systemctl start mysqld なり

起動状態確認

mysql の起動状態確認は
systemctl status mysqld
起動中の場合は Active: active (running)みたいになります。
起動中の場合
service mysqld status
Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 2021-07-01 15:25:05 JST; 36min ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 19092 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 19058 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 19095 (mysqld)
   CGroup: /system.slice/mysqld.service
           mq19095 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

 7月 01 15:25:01 nuc20 systemd[1]: Starting MySQL Server...
 7月 01 15:25:05 nuc20 systemd[1]: Started MySQL Server.
停止中の場合は Active: inactive (dead) みたいになります。
停止中の場合
Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 木 2021-07-01 16:01:51 JST; 1s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 19092 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 19058 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 19095 (code=exited, status=0/SUCCESS)

 7月 01 15:25:01 nuc20 systemd[1]: Starting MySQL Server...
 7月 01 15:25:05 nuc20 systemd[1]: Started MySQL Server.
 7月 01 16:01:49 nuc20 systemd[1]: Stopping MySQL Server...
 7月 01 16:01:51 nuc20 systemd[1]: Stopped MySQL Server.
ログはデフォルトだと /var/log/mysqld.log だと思います。
tail -n 100 /var/log/mysqld.log tail -f /var/log/mysqld.log
AUTHOR
@えのえの
最終更新日 2021/07/01
FAVORITE good stock
LINK TAG
記法を見る