shell指令碼放到crontab裡定時執行
阿新 • • 發佈:2019-02-09
需求需要定時檢查zookeeper程序和mq程序,當程序不存在時去需要自動啟動,把檢查程序的指令碼寫好後,新增到crontab中 設定定時多久執行。
檢測zookeeper程序指令碼 check_zk.sh
#!/bin/sh #echo `date` source /etc/profile PID=`ps aux | grep QuorumPeerMain | grep -v "grep" |wc -l` #pid=`ps aux | grep QuorumPeerMain | grep -v "grep"` echo $PID while [ $PID -eq 0 ]; do echo `date` echo '開始啟動zk指令碼' /home/ekanet/esb/zookeeper-3.4.6/bin/zkServer.sh start & sleep 1 exit 0 done
檢測mq程序指令碼 check_mq.sh
#!/bin/sh #echo `date` source /etc/profile PID=`ps aux | grep activemq.jar | grep -v "grep" |wc -l` #pid=`ps aux | grep activemq.jar | grep -v "grep"` echo $PID while [ $PID -eq 0 ]; do echo `date` echo '開始啟動mq指令碼' /home/ekanet/esb/apache-activemq-5.13.4/bin/activemq start & sleep 1 exit 0 done
編輯crontab 使用命令 crontab -e
#每隔1分鐘檢測一次
*/1 * * * * /home/ekanet/esb/scripts/check_zk.sh >> /home/ekanet/esb/scripts/zklog.log
*/1 * * * * /home/ekanet/esb/scripts/check_mq.sh >> /home/ekanet/esb/scripts/mqlog.log
在實際使用中碰到直接執行指令碼check_zk.sh能執行,但是放置到crontab中執行時並不能把zk服務啟動起來。解決方法
有些shell指令碼正常執行沒問題,但放到crontab裡就執行不成功,原因是因為crontab執行指令碼的時候不會讀取使用者的環境變數等配置
解決方法:
1.在shell前面export下$PATH
export $PATH
- 1
2.或者source下/etc/profile
source /etc/profile