keep.sh
#!/bin/bash
while true
echo $$
do
procnum=`ps -aux |grep "app"|grep -v grep|wc -l`
if [ $procnum -eq 0 ]; then
source /data/env/bin/activate
nohup python /data/app.py >>/data/app.log 2>&1 &
deactivate
fi
sleep 600
done
整个流程是
-
./start.sh
-
./keep.sh > keep.log 2>&1 &
注意:
在 keep.sh 里面 echo $$ 是输出当前进程号,因为shell 脚本启动之后,是很难去查其进程号,没有进程号,就很难杀死该shell脚本启动对应的
进程 ,从keep.log 找到该进程号,kill -s 9 pid 即可
./keep.sh > keep.log 2>&1 & 这个一定要这么写,因为大部分是通过终端连接ubuntu,直接./keep.sh 的话就没法在后端运行,如果终端关闭,那该脚本对应的进程也被自动杀死掉,守护进程就不存在了
最近重新试了一次,发现 ./keep.sh > keep.log 2>&1 & 确实可以在后台运行,但是关掉终端之后,收到hup信号,该脚本还是中
断了,起不了效果。用nohup 也提示很多错误,keep.sh这个脚本还是跑不起来,看来不能终端上执行 ./keep.sh > keep.log 2>&1 & 只能在 screen 会话模式, 关于screen 可以见如下文档
https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
先安装screen
apt-get install screen
再建一个会话
screen -dmS Urumchi
再看这个会话是事成功
screen -list
连上这个会话
screen -r Urumchi
再执行keep.sh脚本
./keep.sh > keep.log 2>&1 &
参考:https://blog.csdn.net/guoyilongedu/article/details/42835931