8 回答
TA贡献1811条经验 获得超4个赞
(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的进程,代表进程启动成功
TA贡献1862条经验 获得超7个赞
试试守护进程啊 老哥
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即可
TA贡献1835条经验 获得超7个赞
有几个可用方法:
-
&
:当前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 和 & 的区别。
- 8 回答
- 0 关注
- 615 浏览
添加回答
举报