簡體   English   中英

從命令行作為后台進程運行 PHP 腳本

[英]Running PHP script from command line as background process

我正在嘗試通過 Linux 中的命令行在后台持續運行 PHP 腳本。 我已經嘗試過命令php filename.php &但似乎腳本執行很快終止,而它應該繼續運行直到進程終止。

有什么建議么?

您確定該腳本不包含任何錯誤嗎? 這通常會使“ 執行很快終止 ”。
首先,追加:

error_reporting(E_ALL); ini_set('display_errors', 1);

在腳本的頂部顯示它可能有的任何錯誤,然后您可以使用:

nohup php filename.php &

即使會話斷開連接或用戶注銷,nohup也會運行命令。

要么

nohup php filename.php >/dev/null 2>&1 &

與上面相同但不創建nohup.out文件。


您還可以使用:
ignore_user_abort(1);

設置客戶端斷開連接是否應中止腳本執行


set_time_limit(0);

限制腳本最長執行時間,在這種情況下,它將一直運行,直到進程完成或apache進程重新啟動。


筆記

phpfilename.php路徑可以作為完整路徑提供 ,而不是phpfilename.php ,你可以使用/usr/bin/php/full/path/to/filename.php
建議使用完整路徑以避免文件未找到錯誤。

您的會話結束時,該流程可能會被關閉。

嘗試使用nohup php filename.php

nohup php file.php > /dev/null 2>&1 &

像這樣的命令中的大於( > )將程序的輸出重定向到某處。 在這種情況下,某些東西被重定向到/dev/null ,而某些東西被重定向到&1

標准輸入,輸出和錯誤

程序的輸入和輸出有三種標准來源。 標准輸入通常來自鍵盤(如果它是交互式程序),或者來自其他程序(如果它正在處理其他程序的輸出)。 程序通常打印到標准輸出,有時打印到標准錯誤。 這三個文件描述符(您可以將它們視為“數據管道”)通常稱為STDIN, STDOUT, and STDERR

有時他們沒有被命名,他們被編號! 它們的內置編號按順序為0, 1, and 2 默認情況下,如果您沒有明確地命名或編號,那么您正在談論STDOUT

上面的命令是將標准輸出重定向到/dev/null ,這是一個你可以轉儲任何你不想要的東西的地方,然后將標准錯誤重定向到標准輸出(你必須在目標前面放一個&這個)。

因此,簡短的解釋是“這個命令的所有輸出都應該被塞進一個黑洞。”這是讓程序真正安靜的一個好方法!

&最后將命令放在后台。

參考: https//www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/

nohup /path/to/command-name arg1 arg2 &

哪里:
command-name :shell腳本或命令名稱。 您可以將參數傳遞給命令或shell腳本。
& :nohup不會自動將其運行的命令放在后台; 您必須通過使用&符號結束命令行來明確地執行此操作。

nohup php filename.php >/dev/null 2>&1 &

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM