PHP 腳本后台執行


1 問題
經常有需要在后台運行的任務,一次性腳本,或者守護方式運行的腳本。我們可以用crontab來定時啟動或者手工啟動,但是如果想一次性啟動兩個關聯的腳本,如何完成呢?

2,兩種方式
方式1:ignore_user_abort函數
場景:通過web頁面提交,運行一段腳本,該腳本運行需要很長時間。例如發送郵件的腳本程序。

參考代碼如下:
<?php ignore_user_abort(); // 后台運行 set_time_limit(0); // 取消腳本運行時間的超時上限 do{ sleep(60); // 休眠1分鍾 }while(true); ?>
參考網頁:http://www.01xj.net/0/?p=266


方式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 &)

重要參考文章:
理解標准輸出,標准錯誤,及其使用方法和原理
http://www.cnblogs.com/caolisong/archive/2007/04/25/726896.html
參考文章:
http://blog.csdn.net/fishg/article/details/6138348
http://www.360doc.com/content/07/0529/19/3500_527618.shtml
http://murray.cn/index.php/2012/03/how-to-nohup-linux-background-command-php-jobs-fg/
http://www.williamlong.info/archives/482.html
http://www.justwinit.cn/post/5550/

或許還有另外的途徑可以完成:popen函數(exec/system/shell_exec等系統調用命令)。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM