PHP後台守護程序的實現方式(Linux環境)

2021-07-17 03:58:25 字數 1912 閱讀 6140

應用場景

所需環境

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...