Bash 脚本在应该终止后不断重生

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 中重新启动该程序,并且脚本应该会终止。

答案1

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

如果您确实尝试启动 /root/daemon,然后让 restartdaemon.sh 脚本返回,您应该执行以下操作:

sh -c /root/守护进程&

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

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

答案2

我认为问题出在你的 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:00 运行,然后在 7:00 再次运行,依此类推。

相关内容