1 问题
经常有需要在后台运行的任务,一次性脚本,或者守护方式运行的脚本。我们可以用crontab来定时启动或者手工启动,但是如果想一次性启动两个关联的脚本,如何完成呢?
2,两种方式
方式1:ignore_user_abort函数
场景:通过web页面提交,运行一段脚本,该脚本运行需要很长时间。例如发送邮件的脚本程序。
参考代码如下:
<?php
ignore_user_abort(); // 后台运行
set_time_limit(0); // 取消脚本运行时间的超时上限
do {
sleep(60); // 休眠1分钟
} while (true);
方式2: 后台启动,使用exec命令
后台启动daemon进程(不间断的运行)。比如异步处理不断输入的消息队列
其中有几个概念需要理解:1,daemon进程(使用fg bg jobs命令可查看);2,输出重定向
例子:
通过运行a.php来执行b.php
a.php中包含该语句:
exec('php b.php');//b.php能够运行,但如果a.php退出,b.php一起退出
exec('php b.php&');//b.php后台运行,但a.php也会一直运行,手动kill掉a.php不影响b.php的运行
exec('php b.php > /dev/null &');//b.php后台运行,a.php调起b.php后,继续执行之后的命令
关键点是:'> /dev/null &'
这个也不一定输出到/dev/null,可以输出给文件的(>> /tmp/tmp.log &)