檢測mysql服務,如果退出則重啟
周海漢
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協議,轉載請註明來源