[英]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進程重新啟動。
php
和filename.php
路徑可以作為完整路徑提供 ,而不是php
和filename.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.