鍍金池/ 問答/PHP  Linux/ 在Centos7.x上如何以后臺服務方式運行PHP文件

在Centos7.x上如何以后臺服務方式運行PHP文件

我知道在Centos的遠程命令行模式下通過php XXX.php方式去執(zhí)行PHP文件。
但這種方式一旦關閉終端,就會停止。我想把PHP文件以后臺服務方式運行,不知道怎么寫,求解答。謝謝

回答
編輯回答
神曲

CentOS 7使用systemd管理系統(tǒng)服務,你需要花點時間去看看systemd的官方文檔

2017年9月23日 17:30
編輯回答
久不遇

linux crontab或者screen

2018年9月15日 18:42
編輯回答
糖果果

nohup php xxx.php > xxx.log &

2017年6月15日 06:09
編輯回答
亮瞎她

不是很懂就別用編譯安裝應用,如果不是編譯安裝的話。使用yum安裝,啟動、停止都很簡單,還好用。

2018年4月12日 21:18
編輯回答
夢若殤

當然用Linux crontab

2017年11月2日 16:04
編輯回答
離殤

有幾個可用方法:

  • &:當前 shell 進程下生成子進程運行

    php run.php &

    缺點:當前 session 斷開時,會向其子進程發(fā)出 hang up 信號,導致掛起中斷

  • nohup 配合 &:忽略掛起信號運行

    nohup php run.php &

    解決 & 中斷的問題。

  • setsid:讓進程在一個新的 session 下運行,也可以避免因為當前 session 中斷,而引起的退出
  • supervise:是 daemontools 的一個工具,可以用來監(jiān)控管理 linux 下的應用程序運行情況,在應用程序出現(xiàn)異常時,supervise 可以重新啟動指定程序。

具體應用哪個需要看實際需求,

  • 如果是很快執(zhí)行完的后臺進程,可以直接用 &
  • 如果是需要執(zhí)行一段時間(這段時間內(nèi)會退出當前的 shell),則可以考慮配合 nohup 或者 setsid 來運行后臺進程。

可以參考我的一篇共享的一篇文章:Linux 技巧:讓進程在后臺可靠運行的幾種方法

文中相對全面的總結了 linux 后臺運行進程的幾種方法,并做了對比。
閱讀此文,可以擴充 linux 后臺運行進程的相關知識,并明白 nohup 和 & 的區(qū)別。

2018年9月7日 18:03
編輯回答
離觴

試試守護進程啊 老哥

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即可

2017年3月15日 21:56
編輯回答
凝雅

(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的進程,代表進程啟動成功

2017年12月12日 14:25