这份文件是listenAndStartMyWatcher.sh
#!/bin/bash
st_dir=`echo ~`
#echo $host_dir
proc_name="MyWatcher.jar"
file_name="/usr/liyunpeng/listenAndStartMyWatcher.log"
startMyWatcherLog="/usr/liyunpeng/startMyWatcher.log"
pid=0
proc_num()
{
num=`ps -ef |grep -w ${proc_name} | grep -v grep | wc -l`
return $num
}
proc_id()
{
pid=`ps -ef |grep -w ${proc_name} | grep -v grep | awk '{print $2}'`
}
proc_num
number=$?
echo 'number='${number} >> ${file_name}
if [[ ${number} -eq 0 ]]
then
echo '进程死了'
echo 'WARNING 进程死了,开始重启====='`date`>> $file_name
/bin/bash /usr/liyunpeng/startMyWatcher.sh >> ${file_name}
#这个result会返回127 或者完全没有值返回
echo 'result='$? >> ${file_name}
if [[ ${result} -gt 0 ]]
then
echo '['`date`' warning]重启成功=====' >> $file_name
else
echo '['`date`' erro]重启失败=====' >> $file_name
fi
else
proc_id
echo '['`date`' info]别慌,他还活着pid:'${pid} >>$file_name
fi
在crontab -e里是这样的
*/1 * * * * /usr/liyunpeng/listenAndStartMyWatcher.sh
会每隔1分钟,就去检查这个进程是否在运行
#!/bin/bash
jar_name=/usr/liyunpeng/MyWatcher.jar
jar_log_name=/usr/liyunpeng/MyWatcher.log
nohup java -jar ${jar_name} > ${jar_log_name} &
无法重启成功,事实上startMyWatcher就是一个简单的重启命令,但我不明白为什么没重启成功
如上面代码所示
能够通过定时任务去实现,这个java进程的永生
已解决,是由于我的java -jar
没有把java
配置成绝对路径,我把所有能用绝对路径的地方都用上了绝对路径。
bash 脚本.sh
你用什么用户执行的这个脚本,有权限吗
逐步排查一波
ll /usr/liyunpeng/listenAndStartMyWatcher.sh
查看文件有没有可执行权限crontab -l
查看一下你加入的定时任务有没有加入成功echo $(date) > /tmp/test.log
,加入成功后查看一下/tmp/test.log
有没有内容输出,也就是验证一下脚本有没有定时执行