2011-03-04 82 views
1

我有一個需要花費很多時間才能完成的腳本。如何在註銷後讓Perl腳本在Unix上運行?

而不是等待它完成,我寧願退出並稍後檢索其輸出。

我試過了;

at -m -t 03030205 -f /path/to/./thescript.pl

nohup /path/to/./thescript.pl &

我也已經驗證的過程實際上psat -l取決於哪個調度語法我用存在。

當我退出殼體時,這兩個過程都會死亡。關閉連接時,有沒有辦法阻止腳本終止?

我們在這裏有crons,它們已經建立並正在正常工作,但我想使用atnohup作爲一次性腳本。

我的語法有什麼問題嗎?有沒有其他方法可以產生理想的結果?


編輯:
我不能使用 screendisown - 他們不是安裝在我的HP UNIX安裝,我不是在位置安裝它們要麼

回答

4

這只是一個猜測,但我已經看到一些版本的ssh和nohup:如果你已經使用ssh登錄,那麼你可能需要重定向標準輸出stderr stdin,以避免會話在您退出時掛起。 (其中一人仍可以連接到終端)。我會嘗試:

nohup /path/to/./thescript.pl > whatever.stdout 2> whatever.stderr < /dev/null & 

(這不再是我目前的ssh和nohup的版本的情況下 - 後者將它們導向它,如果它檢測到任何的附加到終端 - 但您可能會使用不同的版本。)

+0

感謝信息標記......該腳本將所有輸出導入一個'.csv'文件。我不知道我是否需要重定向到stdout – CheeseConQueso

+0

實際上我會重寫打印語句,以便它們打印到屏幕上,然後嘗試您的建議 – CheeseConQueso

+1

好!它的自主性,就像我喜歡它的方式......我只是希望它不會自我意識 – CheeseConQueso

11

使用screen。它創建了一個終端,當你註銷時它將繼續運行。重新登錄後,您可以切換回它。

+2

你不能在屏幕上出錯。花幾分鐘時間學習並熟悉它。這將是值得你的時間下線。 – holygeek

+0

由於很多原因,GNU'screen'很棒,包括這個。絕對推薦它。 –

+0

我不認爲我有屏幕 - 沒有人爲它的文件,即時通訊沒有安裝它,除非它可以在本地執行。感謝您的閱讀材料,雖然 – CheeseConQueso

1

nohup的語法看起來不錯,但您的帳戶可能不允許登錄後運行進程。另外,請嘗試將stdout/stderr重定向到日誌文件或/ dev/null。

+0

感謝您的信息...腳本,本質上,指示所有輸出到'.csv'文件,所以它並不重要(據我所知)重定向到其他任何東西 – CheeseConQueso

1

在後臺運行您的命令。

/path/to/./thescript.pl & 

爲了讓您的後臺作業

jobs 

現在你可以選擇任何斷絕關係上面作業的雙牀,其作業ID。

disown <jobid> 

即使退出後,所有不知名的進程仍應繼續運行。

+0

絕對有幫助,但是有沒有其他方法可以「解除」過程? – CheeseConQueso

5

If you want to keep a process running after you log out:

disown -h <pid>

是一個有用的bash內置。與nohup不同,您可以在已經運行的進程上運行disown

首先,停止與控制-Z你的工作,得到ps的PID(或使用echo $!),使用bg將其發送到後臺,再使用disown與-h標誌。

不要忘記背景你的工作,否則它會在你註銷時被殺死。

+0

我沒有'disown'安裝...謝謝你的提示 – CheeseConQueso

相關問題