我已经尝试了几个小时来执行以下操作(在 Centos 6 上):
- cron 启动进程 A
- 进程A检查进程B是否还活着
- 如果进程 B 不存在,则进程 A 启动进程 B
问题是进程A终止后,进程B也终止了。
进程A和进程B都是bash运行脚本。
我一直在尝试使用bin/bash script.sh &
和exec bin/bash script.sh
都没有成功。如果我从控制台启动进程 A,进程 B 不会终止。
我试图做的事情在理论上是可能的(例如,从 cron 启动的进程启动一个进程并使其生存)。我还可以通过哪些其他方式启动进程 B,使其在进程 A 终止后继续存在?
答案1
在 scriptForA.sh 内部使用nohup scriptForB.sh
...这样,当父进程退出时,子进程不会被终止。
终止时,父进程将向SIGTERM
所有子进程发送信号。如果您使用nohup
,子进程将忽略该SIGTERM
信号。
答案2
我无法解决这个问题,但这就是解决方法这对我有用:
我定义了一个新脚本
run.sh
,它执行以下操作:#!/bin/bash while true do run_process_a.sh sleep 60 done
然后我定义了其他几个脚本
service.sh
: A守护进程脚本start.sh
:启动 run.sh 实例并存储其 pid 的包装器stop.sh
:通过存储的 pid 停止 run.sh 实例的包装器
我使用 init.d 并通过 chkconfig 注册了 service.sh
如前所述,这不是对我的问题的直接答案,但它帮助我解决了我的问题,这就是我将其记录在这里的原因。另外,这可能是实现我的意图的更干净的方法。