linux上執行php腳本文件總是無故中斷(如何讓腳本後臺執行不中斷)


今天還遇到一個比較蛋疼的問題,就是寫的腳本在服務器上執行跑不出數據來,一開始以爲是腳本寫的有問題,跑不出來,就反覆改腳本,實在沒啥可改的了,覺得腳本沒有問題。可是爲啥就是沒數據呢!悲催啊。你寫的東西沒結果,肯定以爲是你的問題。做程序員就是這樣,你的工作沒有結果,肯定就是你的問題。哎。


因爲我寫的統計分析的腳本,因爲很多數據都是多個表聯合查詢,彙總,運算出來的,然後寫庫,形成記錄所以在測試上比較難測試,只能簡單的在測試機上測試下,然後去線上跑,看結果。

我每次把腳本傳給運維,運維上傳,然後幫我執行,可結果呢,總是發現數據少,還不是沒有結果,所以一直以爲是我的程序的問題運維在線上執行任何操作的都是走跳板機,就是通過一箇中間機器,連接在其他的服務器,任何操作都在跳板機上做有記錄。


運維是這樣執行的:跳板機連接到服務器,飯後執行 php  我的腳本 & ;然後沒啥問題的話,就把跳板關了。當你關的時候,其實腳本程序也kill掉了,但是他們也不知道,因爲我的腳本執行時間不少,所以不是特別的明顯。

其實這樣執行是有問題的,如果執行phpfile & 如果你關掉bush的話,你的腳本也會被殺死,需要用nohoup php file & 這樣的話,及時你關閉連接也會執行的。

附:後臺執行UNIX/Linux命令和腳本的五種方法  (附件爲網上查找的)

1. 使用&符號在後臺執行命令

你可以在Linux命令或者腳本後面增加&符號,從而使命令或腳本在後臺執行,例如:.

$ ./my-shell-script.sh &

詳情請參考這篇文章 Bg, Fg, &, Ctrl-Z – 5 Examples to Manage Unix Background Jobs

2. 使用nohup在後臺執行命令

使用&符號在後臺執行命令或腳本後,如果你退出登錄,這個命令就會被自動終止掉。要避免這種情況,你可以使用nohup命令,如下所示:

$ nohup ./my-shell-script.sh &

詳情請參考這篇文章 Unix Nohup: Run a Command or Shell-Script Even after You Logout

3. 使用screen執行命令

通過nohup和&符號在後臺執行命令後,即使你退出登錄,這個命令也會一直執行。但是,你無法重新連接到這個會話,要想重新連接到這個會話,你可以使用screen命令。.

Linux的screen命令提供了分離和重新連接一個會話的功能。當你重新連接這個會話的時候,你的終端和你分離的時候一模一樣。

詳情請參考這篇文章 Screen Command Examples: Get Control of Linux / Unix Terminal

4. 使用at將一個命令作爲批處理執行

使用at命令,你可以讓一個命令在指定的日期和時間運行,例如要在明天上午10點在後臺執行備份腳本,執行下面的命令:

$ at -f backup.sh 10 am tomorrow

詳情請參考這篇文章 Understand at, atq, atrm, batch Commands using 9 Examples

在批處理模式下執行某些任務需要啓用一些選項。下面的文章會給出詳細解釋:.

5. 使用watch連續地執行一個命令

要想按一個固定的間隔不停地執行一個命令,可以使用watch命令,如下所示:

$ watch df -h


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章