每分钟运行一个脚本,无需 cron 并允许子进程

每分钟运行一个脚本,无需 cron 并允许子进程

我写了2个php脚本,一个是worker,一个是master。

如果我手动运行master,它会检查rabbitmq系统并为它检测到的每个队列生成1个worker。然后,如果我再次运行 master ,它会检查每个工作进程是否仍在运行,如果是,则不执行任何操作,如果不是,则重新启动它。

我认为这是一个相当简单的概念。我在 master 中为它生成的每个子进程使用 nohup 和 & 来实现它,现在我确信你可以猜到我想每 60 秒运行一次 master 来检查队列是否存活,如果不是则重新生成它们。

这给我带来了一个问题:我无法在 cron 作业中使用 nohub,并且仅使用 & 本身似乎不起作用。据我所知,工作人员甚至没有执行电话

我尝试创建一个单独的 shell 脚本,然后调用 master.php 也不起作用。我尝试将其创建为 upstart 任务,然后记得在 ubuntu 17+ upstart 中被删除了。

我愿意接受任何不同方法的建议,但无论我采取什么路线,都必须允许我的 master.php 将 work.php 文件作为无头后台进程生成。

答案1

#!/bin/bash
#I am just like a system daemon... 
#I do not need nohup for work, and I should not be called from cron.

#My name is main_safe
#I will become a separeted process even if my father dies... 
#i will check if main is still alive, and if dies i will restart it
#nohup is not needed inside shell script. 
#IMPORTANT: to die is very different from to freeze 
main_safe(){
trap "" HUP
while sleep 120; do
   main&
   wait 
done

}

#My name is main I like to keep restarting php master.php
#everytime it go away... remove wait and I will keep starting master.php with absolutely no reason.
#If you are paranoid you can program me to restart main_safe,
#But what will happen if you try to stop me? Bad things.. so... 
#IMPORTANT: to die is very different from to freeze 
main(){
trap "" HUP
while sleep 60; do

     php master.php & 
     #do whatever you want here

     #uncomment this to prevent two instances of master.php from going up maybe it is necessary:
     wait

done
}


#nohup is not needed in shell script
main_safe& 
pstree -p | grep $! 

这是可以接受的吗?

答案2

使用systemd怎么样?我做了一些搜索,随着 systemd 取代了 ubuntu 的新版本的 upstart,这可能很有用。下面的链接可能会有所帮助。

Digital Ocean:如何配置 Linux 服务在崩溃或重启后自动启动

相关内容