1.由于项目需要用到常驻进程执行系统的命令,网上搜了下使用nohup常驻进程:

nohup php path/file_name.php > /dev/null 2>&1 &

可以查看老爷爷的博客园:Linux的nohup作用

但是由于nohup虽然在一次启动中可以常驻,可是不能保证进程是否断开,或者已经执行完了,

所以需要守护进程的命令工具来重启nohup常驻进程,这时可以使用服务器自带的插件Systemctl这个工具来实现。

※虽然守护进程可以确保进程一直存在、常驻进程一直在执行,但是代码中不能断开或者执行完成,一定要在代码里面加入while,让其一直执行

while (TRUE) {
}

参考来源:Systemctl守护进程简单例子

Systemctl守护进程的服务需要做成service文件,然后放入系统执行目录、启动才能生效,步骤如下:

系统服务配置操作步骤:

1.拷贝创建的serveice文件到系统服务目录
cp /workspace/web-site/operations/system_service/queue_one.prod.service  /usr/lib/systemd/system/queue_one.prod.service

2.重新加载系统服务单元池(每次添加或者修改service文件内容的情况下都必须执行重载)
systemctl daemon-reload

3.启动服务(自动启动进程)
systemctl start queue_one.prod.service

加入系统自动开机启动
systemctl enable queue_one.prod.service

4.停止服务(自动关闭进程)
systemctl stop queue_one.prod.service

2.同样的原理还有其他方式,使用常驻进程和自动监听再新建进程:

posix + pcntl + steam_select

可以获取进程ID、监听到进程退出后再开一个

awk 匹配端口号