1. 程式人生 > >shell指令碼放到crontab裡定時執行

shell指令碼放到crontab裡定時執行

需求需要定時檢查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