Bash脚本应该死后继续重生

#!/bin/bash PID=$(pidof daemon) kill $PID while ps -e | grep "[d]aemon" >> /dev/null; do sleep 30 done sh -c /root/daemon 

这个脚本被设置在一个cronjob上来杀死并重启这个程序。 它是这样做的,但是在脚本退出之后,它会保持重新生成,这使得手动守护守护进程非常困难。 它应该在子shell中重新启动程序,脚本应该死掉。

好吧,我认为真正的问题是,当你执行“sh -c / root / daemon”时,你的脚本将不会返回,直到该命令返回。

如果你真的试图启动/ root /守护进程,然后让你的restartdaemon.sh脚本返回,你应该这样做:

sh -c / root / daemon&

这样您的重新启动脚本将立即返回,而不是等待/ root / daemon命令返回。

当然,这意味着当你的下一个cron作业杀死守护进程时,它应该“返回”,然后你的脚本将会退出,所以这并不能解释为什么你仍然有成千上万的内存在运行,但至less这是一个开始:)

我认为这个问题是在你的cron

 * 3,7,10,14,18,23 * * * /root/restartdaemon.sh 

第一个*是分钟,意思是在3:00再运行脚本,然后在3:01,3:02等等

尝试

 0 3,7,10,14,18,23 * * * /root/restartdaemon.sh 

那将在3点再运行,然后在7点再运行,依此类推。