2012-05-04 48 views

回答

-1

使用&運營商在後臺啓動它。

./abc.sh &這將繼續,直到(一)執行完畢或者(b)你殺它或(c)系統重新啓動

+3

這是不對的,如果你註銷這將停止,你可以使用'nohup'來防止這個,但我更喜歡屏幕。 – Benj

4

有幾個這樣的方式,但最巧妙的方法是使用screen。這使您可以創建一個會在計算機上永久生存的會話,您可以簡單地重新連接以檢查長時間運行的進程的進度。

如果你不希望使用screen可以使用nohup這允許你運行一個任務,如:

nohup mytask &

你現在的任務會在後臺運行,並會生存註銷,但與screen不同,無法再控制它。

+0

感謝屏幕輸入Benj。感謝你的幫助! – Satya

+0

我有一個小腳本,我需要連續檢查某些條件,只要條件滿足,程序應該執行。這可以做到嗎?我想過使用crontab腳本每5分鐘運行一次,但現在我希望在沒有crontab的情況下完成腳本。 – Atul

1

除了在後臺啓動它,如上所述,您可能需要使用'nohup'。這意味着即使關閉終端,它也會繼續運行。

nohup的./abc.sh &

1
if [ "x$1" != "x--" ]; then 
$0 -- 1> /dev/null 2> /dev/null & 
exit 0 
fi 

這是你如何可以運行一個腳本作爲守護。首先你的劇本(父親)會創建一個自己的副本(一個孩子),所以它被認爲是父親的一個過程。然後當孩子還在跑時父親會自殺。猜猜你做這樣的事情會發生什麼?孩子被附加到init進程。所以即使你註銷,腳本仍然會運行。 您甚至可以在沒有「&」運算符的情況下啓動它,因爲您啓動了在一毫秒後死亡的父親。
您可以像在計算機上運行的任何程序一樣再次對其進行控制。

順便說一句,它不是一個真正的「守護進程」程序,它只是一種模擬。如果你想在登錄時啓動它,你就不能在啓動時啓動它(非常簡單地說是BOOT而不是登錄),很簡單,它就在你的.xinitrc

這個解決方案的主要優點是你的腳本不依賴於任何其他程序,比如「nohup」,我認爲這真的很糟糕。 PS:如果你想了解一些關於上述命令的信息,只需問我一下。這只是一個「參數」的事情。

+0

嘿,你可以請讓我知道這是如何工作的。實際上,我有一個小腳本,我需要連續檢查某些條件,只要條件滿足,程序應該執行。這可以做到嗎?我想過使用crontab腳本每5分鐘左右運行一次,但現在我希望不用crontab來完成 – Atul

+0

如果它不是一個連續運行的腳本,那麼應該使用cron。 以下是我在開始寫作時給出的條件的解釋: 如果程序的第一個參數不是「 - 」,那麼:運行帶有參數「 - 」的相同腳本,並將錯誤重定向到其他地方(/dev/null是垃圾文件夾)以及標準輸出。 然後退出。 在那裏你可以做一段時間[真]讓它無限期地運行。在你的while循環中,只需要添加一個你需要的時間(5分鐘)的睡眠函數,然後它就是一個常規的bash腳本。 這是一個例子:http://pastebin.com/us76BRKj – Depado

+0

所以雖然runing有沒有必要用nohup來運行這個? – Atul

2

正如其他人之前提到的那樣,您需要使用nohup來防止進程獲得掛斷信號(因此無法啓動)。

但是,如果你在開始與後臺啓動過程中,由於

prompt> nohup process & 

有沒有讓你進入可能需要得到流程開始時的任何數據的缺點。這可能是密碼/憑證或過程需要的其他輸入。

如果你有這個要求,最後在沒有「&」的情況下啓動它,輸入你的輸入,然後點擊Ctrl-Z讓進程進入休眠狀態。要將其發送到後臺,請在提示符處輸入「bg」並按Enter鍵。

prompt> nohup process 
Enter password: 
(Now press Ctrl-Z) 
[1]+ Stopped     process 
prompt> bg 
[1]+ process & 

現在,即使您註銷,進程仍將繼續在後臺運行。

或者,如果您使用的是bash或zsh,如果您沒有使用nohup開始啓動進程,並且殺死它並重新啓動不是一個選項,那麼您可以使用內置的disown命令。首先暫停和背景的過程。然後停止掛斷信號到達它。

prompt> process 
Enter password: 
(Now press Ctrl-Z) 
[1]+ Stopped     process 
prompt> bg 
[1]+ process & 
prompt> disown -h 

注意:如果您有其它後臺任務運行時,您需要提供JOBSPEC只認這個特定的工作。

prompt> disown -h %1 

相反的[1]如果你想看到的[2]當你停下來,發送過程中的背景,你會說disown -h %2來代替。

+0

+1關於如何在事後使用nohup ..我不知道這一點。 – Benj

+0

謝謝。我還添加了一個解釋,用於防止SIGHUP從首先不是以nohup開始的進程發送。 –

相關問題