从 cron 作业启动守护进程

从 cron 作业启动守护进程

我已经尝试了几个小时来执行以下操作(在 Centos 6 上):

  1. cron 启动进程 A
  2. 进程A检查进程B是否还活着
  3. 如果进程 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

我无法解决这个问题,但这就是解决方法这对我有用:

  1. 我定义了一个新脚本run.sh,它执行以下操作:

    #!/bin/bash
    
    while true
    do
       run_process_a.sh
       sleep 60
    done
    
  2. 然后我定义了其他几个脚本

    • service.sh: A守护进程脚本
    • start.sh:启动 run.sh 实例并存储其 pid 的包装器
    • stop.sh:通过存储的 pid 停止 run.sh 实例的包装器
  3. 我使用 init.d 并通过 chkconfig 注册了 service.sh

如前所述,这不是对我的问题的直接答案,但它帮助我解决了我的问题,这就是我将其记录在这里的原因。另外,这可能是实现我的意图的更干净的方法。

相关内容