1. 程式人生 > >檢測mysql服務,如果退出則重啟

檢測mysql服務,如果退出則重啟

2013-01-01

周海漢

2013.1.1

檢測重啟的bash指令碼如下:

[email protected]:~# cat my.sh #!/bin/bash

my=ps -ef |grep mysql |grep -v root |wc -l date=date if [ $my != 1 ]; then service mysql start echo “$date mysql start” fi

指令碼單獨執行沒有問題,但放到crontab裡一直執行不成功,能檢測到mysql不存在,但不能重啟成功。

[email protected]:~# vi /var/log/syslog

Jan 1 06:28:01 AY121229032451aac9841 CRON[30177]: (root) CMD (/root/my.sh»myrestart.log) Jan 1 06:28:01 AY121229032451aac9841 CRON[30176]: (CRON) info (No MTA installed, discarding output)

沒有安裝郵局,所以收不到crontab報錯郵件。

[email protected]:~# apt-get install postfix

[email protected]:~# apt-get install mailutils

收到郵件,提示如下:

/etc/init.d/mysql: 54: /etc/init.d/mysql: initctl: not found /etc/init.d/mysql: 82: /etc/init.d/mysql: start: not found

/usr/sbin/service: 123: exec: start: not found

這是因為crontab的環境是限制環境,PATH環境變數很短,執行service時會找不到一些檔案。

[email protected]:~# ls /sbin/stop /sbin/start /sbin/status -l lrwxrwxrwx 1 root root 7 Apr 26 2012 /sbin/start -> initctl lrwxrwxrwx 1 root root 7 Apr 26 2012 /sbin/status -> initctl lrwxrwxrwx 1 root root 7 Apr 26 2012 /sbin/stop -> initctl

ubuntu 12.04中crontab的Path中沒有/sbin, 所以會找不到一些命令。

解決辦法:

1.crontab -e, 在檔案中直接新增PATH:

m h dom mon dow command

PATH=/usr/sbin:/usr/bin:/sbin:/bin:$PATH */1 * * * * /bin/bash /root/my.sh»myrestart.log

2.在程式中新增PATH,設定好環境變數。

3.修改/etc/crontab或/etc/profile新增環境變數。但由於是整體修改,可能對其他使用者帶來不良影響,所以需要謹慎,不推薦。

參考:

http://ubuntuforums.org/showthread.php?t=2022708

如非註明轉載, 均為原創. 本站遵循知識共享CC協議,轉載請註明來源