2013-10-07 12 views
0

我有一個UNIX腳本中的命令需要重複執行,但該命令可以運行,只有當上一個已成功完成下一次。我搜索了可以告訴腳本已經完成執行的命令,但我找不到它。我是unix腳本中的新手,並開始喜歡unix腳本。時,前一個是做

+0

如果您沒有在後臺顯式運行命令,則腳本的下一行僅在命令完成時纔會執行。 – tripleee

+0

我前面一樣使用:#!/ bin/sh的命令1;命令2; ....但問題是,所有給定的命令同時執行。那麼在每個命令之後,我會在估計執行每個命令的時間後給出睡眠20。它真的很好:)即使你在前臺運行它 – 10hero

+0

所以'command1'啓動一個後臺的工作嗎?有什麼辦法可以防止這種情況發生?例如,一些守護進程可以在前臺運行'--interactive'等選項。 – tripleee

回答

1

爲了一個命令只執行前一成功後,你需要寫兩個爲:

command1 && command2 

若要用一個命令循環有了這個,你將需要檢查每次調用的返回狀態,如果不成功則退出循環;最短的形式應該是這樣的:

while your_command; do :; done 

你也可以插入一個sleep代替NOOP :的。

+0

是:D睡眠選項。它看起來真的很愚蠢,但是我在每次給出睡眠選項的命令後都嘗試了睡眠命令。它運行良好,但它只是可行的事情。 – 10hero

+0

@ 10hero:我不知道我得到的...要使用睡眠,你需要寫'睡眠';但最有可能我誤解了你的評論... –

+0

對不起!實際上我使用睡眠每個命令估計每個命令的執行時間爲相同的命令必須每次使用後。 – 10hero

0

您需要存儲你的背景指令的PID(進程ID)的一些文件,讓你的腳本可以自動檢查其是否仍在運行在下次啓動的時間。例如:

if [ ! "kill -0 $(</var/run/myscript-command.pid) 2>/dev/null 1>&2" ]; then 
    somecommand& 
    $CMD_PID = $! 
    echo $CMD_PID >/var/run/myscript-command.pid 
fi 

對於這個工作somecommand需要守護自己。如果沒有,則將其稱爲:

nohup ./somecommand 0<&- &>/dev/null & 
+0

謝謝羅伯特我會嘗試。 – 10hero

相關問題