我知道在Centos的远程命令行模式下通过php XXX.php方式去执行PHP文件。
但这种方式一旦关闭终端,就会停止。我想把PHP文件以后台服务方式运行,不知道怎么写,求解答。谢谢
我知道在Centos的远程命令行模式下通过php XXX.php方式去执行PHP文件。
但这种方式一旦关闭终端,就会停止。我想把PHP文件以后台服务方式运行,不知道怎么写,求解答。谢谢
试试守护进程啊 老哥
class deamon
{
public function _deamon() {
$pid = pcntl_fork();
if($pid == -1) throw new Exception('fork fail');
else if($pid > 0) {
exit('parent gone'.PHP_EOL);
}
if(posix_setsid() === -1) throw new Exception('set sid fail');
chdir('/tmp/deamon');
umask(0);
echo "child process id:" . posix_getpid().PHP_EOL;
while(1) {
// 需要执行的代码
}
}
}
不想执行的时候, kill pid即可
有几个可用方法:
&
:当前 shell
进程下生成子进程运行
php run.php &
缺点:当前 session
断开时,会向其子进程发出 hang up
信号,导致挂起中断
nohup
配合 &
:忽略挂起信号运行
nohup php run.php &
解决 &
中断的问题。
setsid
:让进程在一个新的 session
下运行,也可以避免因为当前 session
中断,而引起的退出supervise
:是 daemontools
的一个工具,可以用来监控管理 linux
下的应用程序运行情况,在应用程序出现异常时,supervise
可以重新启动指定程序。具体应用哪个需要看实际需求,
&
shell
),则可以考虑配合 nohup
或者 setsid
来运行后台进程。可以参考我的一篇共享的一篇文章:Linux 技巧:让进程在后台可靠运行的几种方法
文中相对全面的总结了 linux 后台运行进程的几种方法,并做了对比。
阅读此文,可以扩充 linux 后台运行进程的相关知识,并明白 nohup 和 & 的区别。
2 回答1.5k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答871 阅读✓ 已解决
1 回答720 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答559 阅读✓ 已解决
1 回答864 阅读✓ 已解决
(1)如果你要执行的php文件是定时执行的,通过Linux crontab定时执行任务,基本格式为
* command
分 时 日 月 周 命令
(2)如果你是不断要在后台跑脚本,也可以借助一些进程控制工具,譬如Supervisor,举个之前在ubuntu配置的例子:
//如果没有安装supervisor,要先安装,已经安装的跳过这一步
$ sudo apt-get install supervisor
$ cd /etc/supervisor/conf.d
//创建一个进程配置文件
$ sudo vi laravel_queue_order.conf
//内容如下:
[program:yourProgramName]
process_name=%(program_name)s_%(process_num)02d
command=php yourCommand
directory=/var/www/yourproject
autostart=true
autorestart=true
numprocs=4
stdout_logfile=/var/www/yourproject/storage/logs/yourProjectLogName.log
//进程数numprocs由自己确定
//开启进程
sudo service supervisor start
sudo supervisorctl update
sudo supervisorctl reread
sudo supervisorctl start yourProgramName
//可以使用htop查看进程是否正确运行中
$ htop
//如果有出现command为php yourCommand的进程,代表进程启动成功