2015-10-31 56 views
0

任何想法爲什麼一個簡單的無限循環在每小時的第一分鐘停止?例如,21:01,22:01,23:01,等PHP無限循環在每小時的第一分鐘停止

服務器運行Ubuntu 12.04和PHP腳本啓動使用命令: 「PHP -f test.php的」

while (1 == 1) { 
    echo "test"; 
    sleep(30); 
} 

任何幫助表示讚賞。

UPDATE:不要緊,我是否運行腳本或16:05 16:49,它將停止在17:01,所以問題沒有涉及到的set_time_limit值。

更新:如果腳本必須睡一小時然後回顯「測試」,則「測試」不會被回顯。腳本停止它的工作而不完成循環本身。

更新:看來,我已經發現什麼是殺死劇本。我已經設置了PHP腳本來報告所有錯誤,並在*:01時間到來之前,我得到文本:終止。我谷歌搜索該腳本可能得到OOM殺手終止,不幸的是,我沒有權限改變它當前VPS上的設置。我正在切換到VDS並嘗試修改OOM殺手設置。

+0

1st - 檢查PHP是否設置超時,第二次檢查您的Ubuntu是否有設置清除運行時間過長的任務等。 您是否在終端或其crontab任務中運行此操作? – Svetoslav

+0

@Svetlio我在終端上運行它。 PHP沒有任何超時。劇本簡單地停下來,如果我在第59分鐘或第15分鐘發佈劇本,它會在第一分鐘的下一小時停止。 – tomtam

+0

@Synaps我的模式是每隔30秒簡單運行一次腳本,而不是以任何方式停止 – tomtam

回答

0

如果你正在使用PHP文件通過Apache即作爲URL,那麼你應該做的

ini_set('max_execution_time', 0); //0=NOLIMIT 

如果您正在運行通過命令行,這不應該普遍發生

UPDATE 下面是一些筆記形式php.net。我希望它會幫助你

警告該函數時PHP在安全模式下運行沒有影響。 除了關閉安全模式或更改php.ini中的時間限制外,沒有任何解決方法。

注:的set_time_limit()函數的功能和配置指令 的max_execution_time隻影響腳本本身 的執行時間。在確定腳本運行的最長時間 時,不包括腳本執行 以外的任何活動時間,例如使用system()系統調用,流操作, 數據庫查詢等。在測量時間是真實的Windows 上,這不是真的。

因此,有可能PHP代碼不會實際中斷。但是,任何其他合作/呼叫正在破裂。

+0

我使用CLI和參數「max_execution_time」設置爲0.這很奇怪,因爲它工作正常,直到現在,我沒有改變腳本和設置。 – tomtam

+0

如果從CLI運行,這個參數沒有影響,因爲我知道。 –

+0

我剛剛閱讀了set_time_limit()的手冊,如果通過執行超時發生問題,則必須在控制檯上打印出如下錯誤:超時限制。但我明白......沒有消息......就像kill -9 your-process-id一樣? –

0

我想這是因爲在Limits the maximum execution time上。

如果您想要每天,每小時和每分鐘重複一次腳本,則應在每次需要時使用Cronjob來調用腳本。在流行的Web主機一樣直接管理和的cPanel

可用

的cronjob例如,你可以使用下面的命令來運行腳本每隔一分鐘

*/1 * * * * /usr/local/bin/php -q /home/user/domains/domain.com/public_html/script.php 

,如果你想運行腳本,每一秒,你可以設置最大執行時間爲一分鐘,並且每秒重複一次代碼並使用cronjob每分鐘調用一次

+0

我希望腳本能夠持續運行。由於腳本在每小時的第一分鐘停止,因此問題與set_time_limit無關。 – tomtam

+0

@tomtam我說你可以使用cronjob連續運行你的腳本,如果你的腳本可以運行1分鐘,你可以每分鐘用cronjob調用它...它是最小的腳本不斷運行 – MOB

+0

這是一個可能的選項,但它不會解決這個問題。關於@tomtam的問題是爲什麼這個進程每小時停在*:01 –

0

在我的ubuntu系統中有一個腳本/etc/cron.d/php5

# /etc/cron.d/php5: crontab fragment for php5 
# This purges session files older than X, where X is defined in seconds 
# as the largest value of session.gc_maxlifetime from all your php.ini 
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime 

# Look for and purge old sessions every 30 minutes 
09,39 *  * * *  root [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime) 

該腳本/usr/lib/php5/maxliftime將在位於/etc/php5/*/php.ini

檢查該值的任何php.ini文件通過

cd /etc/php5 
grep -ri gc_maxlifetime . 

檢查PARAM

session.gc_maxlifetime 

如果有一個價值3600你應該得到它。

+0

嗯......從我們的另一臺服務器上看,'sessionclean'腳本只會刪除/ var/lib/php5中的文件......不確定如果這取決於Ubuntu版本。所以也許上述會有所幫助,也許不會 - 期待你的結果 –