如何將我的php指令碼以守護程序的方式一直執行

2021-08-21 02:58:47 字數 2271 閱讀 1592

寫好php指令碼。建議定期檢測記憶體占用,核心邏輯就不寫了。這個跟業務有關。

if(memory_get_usage()>100*1024*1024)

假設該php檔案的路徑為/root/run.php

開啟終端

setsid php /root/run.php > /dev/null &

編輯程序監控指令碼,當程序不存在時,自動重啟 /root/monitor.sh

#!/bin/bash

alive=`ps aux|grep root\/run|grep -v grep|wc -l`

if [ $alive -eq 0]

then

php /root/run.php > /dev/null &

fi新增計畫任務(每分鐘檢測一次)

crontab -e

* * * * * /root/monitor.sh > /dev/null &

用乙個簡單可靠的shell指令碼來守護乙個可能會突發退出的php服務

/etc/rc.local 裡加入開機啟動命令:

nohup /path/to/swoole.sh >>/path/to/swoole.sh.log 2>&1 &

swoole.sh 內容如下:

#!/bin/sh

prefix=/home/eechen

interval=1

nohup php $/swoole.php >>$/swoole.log 2>&1 & echo $! > $/swoole.pid

while [ 1 ]; do

if [ ! -d /proc/`cat $/swoole.pid` ]; then

nohup php $/swoole.php >>$/swoole.log 2>&1 & echo $! > $/swoole.pid

echo 'new_pid:'`cat $/swoole.pid && date '+%y-%m-%d %h:%m:%s'`

fisleep $

done

其中:nohup 表示忽略sighup訊號(編號1),比如退出終端時傳送的sighup訊號(kill -sighup pid)會被忽略掉.

>>$/swoole.log 表示把標準輸出重定向(>>表示追加,>表示覆蓋)到檔案swoole.log

2>&1 表示將標準錯誤(2:stderr)重定向到標準輸出(1:stdout).

結尾加上&表示將命令放入後台執行.

$! 表示前面執行在後台的php程序pid.

也就是swoole.sh每隔1秒檢測一次目錄/proc/pid是否存在,如果不存在,則重新啟動服務.

swoole.sh.log 記錄的是服務重新啟動的時間.

swoole.log 記錄的是服務自己的輸出.

比如用shell守護vmstat:

vmstat.sh

#!/bin/sh

prefix=/home/eechen

interval=1

nohup vmstat 1 >>$/vmstat.log 2>&1 & echo $! > $/vmstat.pid

while [ 1 ]; do

if [ ! -d /proc/`cat $/vmstat.pid` ]; then

nohup vmstat 1 >>$/vmstat.log 2>&1 & echo $! > $/vmstat.pid

echo 'new_pid:'`cat $/vmstat.pid && date '+%y-%m-%d %h:%m:%s'`

fisleep $

done

#執行nohup /home/eechen/vmstat.sh >>/home/eechen/vmstat.sh.log 2>&1 &

#殺死,可以看到vmstat被重啟

kill `cat /home/eechen/vmstat.pid`

這個vmstat.sh的指令碼也可以用php實現:

nohup php /home/eechen/vmstat.php >>/home/eechen/vmstat.php.log 2>&1 &

<?php

$prefix = '/home/eechen';

$interval = 1;

shell_exec("nohup vmstat 1 >>$prefix/vmstat.log 2>&1 & echo $! > $prefix/vmstat.pid");

while ( 1 )

sleep($interval);

}

如何將我的php指令碼以守護程序的方式一直執行

寫好php指令碼。建議定期檢測記憶體占用,核心邏輯就不寫了。這個跟業務有關。if memory get usage 100 1024 1024 假設該php檔案的路徑為 root run.php 開啟終端 setsid php root run.php dev null 編輯程序監控指令碼,當程序不...

PHP如何將程序作為守護程序

看了這篇 對裡面的posix setsid 不解 文件解釋是 make the current process a session leader 意思就是在乙個程序組之間 父程序和子程序 呼叫這個函式的程序會被選舉為程序組的leader 所以讓乙個程序成為守護程序的方法就是 1 fork出乙個子程序...

PHP如何將程序作為守護程序

看了這篇 對裡面的posix setsid 不解 文件解釋是 make the current process a session leader 意思就是在乙個程序組之間 父程序和子程序 呼叫這個函式的程序會被選舉為程序組的leader 所以讓乙個程序成為守護程序的方法就是 1 fork出乙個子程序...