寫好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出乙個子程序...