應用場景
所需環境
linux實現方式
1. 準備php指令碼在/usr/local/src/目錄下,新建乙個daemon.php指令碼檔案,內如如下:
<?php
class daemon elseif ($pid > 0)
//建立乙個新的會話,脫離終端控制,更改子程序為組長程序
$sid = posix_setsid();
if ($sid == -1)
//修改當前程序的工作目錄,由於子程序會繼承父程序的工作目錄,修改工作目錄以釋放對父程序工作目錄的占用。
chdir('/');
/*** 通過上一步,我們建立了乙個新的會話組長,程序組長,且脫離了終端,但是會話組長可以申請重新開啟乙個終端,為了避免
* 這種情況,我們再次建立乙個子程序,並退出當前程序,這樣執行的程序就不再是會話組長。
*/$pid = pcntl_fork();
if ($pid == -1) elseif ($pid > 0)
//由於守護程序用不到標準輸入輸出,關閉標準輸入,輸出,錯誤輸出描述符
fclose(stdin);
fclose(stdout);
fclose(stderr); }}
$daemon = new daemon();
$daemon->init();
//處理業務**
while(true)
該指令碼的作用,就是每隔5秒,向日誌檔案中寫入乙個時間戳,當然,這個只是乙個簡單的示例,具體應用中,我們還需要根據業務的不同,編寫具體的業務處理**。2. 以後臺方式執行php指令碼
在命令列下,輸入:
nohup php /usr/local/src/daemon.php &
3. 檢視日誌輸出在命令列下,輸入:
tail -f /usr/local/src/log.txt
我們將會看到如下資訊:
4. 關閉php後台程序首先,我們需要查出該程序的pid,命令:
ps -ef | grep "php /usr/local/src/daemon.php"
然後,通過這個pid把該程序kill掉
kill -9 22767
其中,22767就是php後台程序的pid號。
5. 開機自啟通過前面的步驟,我們知道如何開啟和關閉乙個php程序,但是,在實際的應用中,我們不可能每次都是手動開啟,這樣我們就會損失掉一部分業務資料,所以我們必須要讓該程序開機自動執行,步驟如下:
在/etc/rc.local檔案中,將nohup php /usr/local/src/daemon.php &這個命令加入即可。
PHP實現守護程序方式,Linux後台執行
linux後台執行程式,nohup 和 結合使用 使用 後台執行程式 使用nohup執行程式 缺點 依賴終端 此時使用fg命令可以恢復前台執行 ps 後台程序並未完全脫離終端,在終端未關閉前還是會往終端輸出結果,後台程式會隨shell退出而停止 缺點 占用終端 用途 不結束通話地執行命令,即使終端s...
PHP實現守護程序方式,Linux後台執行
linux後台執行程式,nohup 和 結合使用 使用 後台執行程式 使用nohup執行程式 缺點 依賴終端 此時使用fg命令可以恢復前台執行 ps 後台程序並未完全脫離終端,在終端未關閉前還是會往終端輸出結果,後台程式會隨shell退出而停止 缺點 占用終端 用途 不結束通話地執行命令,即使終端s...
PHP實現守護程序方式,Linux後台執行
linux後台執行程式,nohup 和 結合使用 使用 後台執行程式 使用nohup執行程式 缺點 依賴終端 此時使用fg命令可以恢復前台執行 ps 後台程序並未完全脫離終端,在終端未關閉前還是會往終端輸出結果,後台程式會隨shell退出而停止 缺點 占用終端 用途 不結束通話地執行命令,即使終端s...