我有一个每 10 分钟运行一次的 cronjob。正在运行的脚本有时会检测到问题并启动服务(使用/sbin/service XXX start
),最终启动一个 java 进程。
如果脚本启动了 java 服务,我最初的 cronjob 脚本将永远运行:
root 8003 0.0 0.0 106100 212 ? Ss 00:40 0:00 /bin/bash /root/scripts/cron_script.sh
root 10295 0.0 0.0 106100 40 ? Ss Oct25 0:00 /bin/bash /root/scripts/cron_script.sh
root 11135 0.0 0.0 106100 208 ? Ss Oct26 0:00 /bin/bash /root/scripts/cron_script.sh
root 22787 0.0 0.0 0 0 ? Zs Oct26 0:00 /bin/bash /root/scripts/cron_script.sh
root 29956 0.0 0.0 106100 208 ? Ss Oct25 0:00 /bin/bash /root/scripts/cron_script.sh
我想要的是让这些脚本从正在运行的进程列表中消失(或者在服务启动后根本不出现)
如果我终止这些脚本,则会发生以下两件事:
-> 我的服务java
进程没有被终止(这很好)
-> 我现在在进程列表中得到以下内容:
root 8003 0.0 0.0 0 0 ? Zs 00:40 0:00 [cron_script] <defunct>
root 10295 0.0 0.0 0 0 ? Zs Oct25 0:00 [cron_script] <defunct>
root 11135 0.0 0.0 0 0 ? Zs Oct26 0:00 [cron_script] <defunct>
root 22787 0.0 0.0 0 0 ? Zs Oct26 0:00 [cron_script] <defunct>
root 29956 0.0 0.0 0 0 ? Zs Oct25 0:00 [cron_script] <defunct>
那么,如何确保我的服务(重新)启动后 cron 进程始终消失?
PS:该cron_script.sh
脚本是 5 个进程调用堆栈的根,直到到达服务java
并且它们都保持运行。