我知道在Centos的遠程命令行模式下通過php XXX.php方式去執(zhí)行PHP文件。
但這種方式一旦關閉終端,就會停止。我想把PHP文件以后臺服務方式運行,不知道怎么寫,求解答。謝謝
有幾個可用方法:
&
:當前 shell
進程下生成子進程運行
php run.php &
缺點:當前 session
斷開時,會向其子進程發(fā)出 hang up
信號,導致掛起中斷
nohup
配合 &
:忽略掛起信號運行
nohup php run.php &
解決 &
中斷的問題。
setsid
:讓進程在一個新的 session
下運行,也可以避免因為當前 session
中斷,而引起的退出supervise
:是 daemontools
的一個工具,可以用來監(jiān)控管理 linux
下的應用程序運行情況,在應用程序出現(xiàn)異常時,supervise
可以重新啟動指定程序。具體應用哪個需要看實際需求,
&
shell
),則可以考慮配合 nohup
或者 setsid
來運行后臺進程。可以參考我的一篇共享的一篇文章:Linux 技巧:讓進程在后臺可靠運行的幾種方法
文中相對全面的總結了 linux 后臺運行進程的幾種方法,并做了對比。
閱讀此文,可以擴充 linux 后臺運行進程的相關知識,并明白 nohup 和 & 的區(qū)別。
試試守護進程啊 老哥
class deamon
{
public function _deamon() {
$pid = pcntl_fork();
if($pid == -1) throw new Exception('fork fail');
else if($pid > 0) {
exit('parent gone'.PHP_EOL);
}
if(posix_setsid() === -1) throw new Exception('set sid fail');
chdir('/tmp/deamon');
umask(0);
echo "child process id:" . posix_getpid().PHP_EOL;
while(1) {
// 需要執(zhí)行的代碼
}
}
}
不想執(zhí)行的時候, kill pid即可
(1)如果你要執(zhí)行的php文件是定時執(zhí)行的,通過Linux crontab定時執(zhí)行任務,基本格式為
* command
分 時 日 月 周 命令
(2)如果你是不斷要在后臺跑腳本,也可以借助一些進程控制工具,譬如Supervisor,舉個之前在ubuntu配置的例子:
//如果沒有安裝supervisor,要先安裝,已經(jīng)安裝的跳過這一步
$ sudo apt-get install supervisor
$ cd /etc/supervisor/conf.d
//創(chuàng)建一個進程配置文件
$ sudo vi laravel_queue_order.conf
//內(nèi)容如下:
[program:yourProgramName]
process_name=%(program_name)s_%(process_num)02d
command=php yourCommand
directory=/var/www/yourproject
autostart=true
autorestart=true
numprocs=4
stdout_logfile=/var/www/yourproject/storage/logs/yourProjectLogName.log
//進程數(shù)numprocs由自己確定
//開啟進程
sudo service supervisor start
sudo supervisorctl update
sudo supervisorctl reread
sudo supervisorctl start yourProgramName
//可以使用htop查看進程是否正確運行中
$ htop
//如果有出現(xiàn)command為php yourCommand的進程,代表進程啟動成功
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構,發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。