2013-07-19 32 views
4

我想在MacOS中執行一次shell腳本。如何使用命令「at」在MacOS中執行shell

起初,我在Ubuntu試過了「at」命令,它表現不錯。 但是當我在MacOS上使用同樣的方法,事情不順心

我輸入:已成功添加

$ at now + 2 minutes 
ls -al > tmpfile 
(ctrl+d,EOF) 

的工作。

的輸出 「在-l」 是:

(some other output) 
11   Fri Jul 19 15:18:00 2013 

但15:18後,TMPFILE沒有改變。

我想知道如何在MacOS上使用「在」命令corectly或有任何其他的方法來一次(不是週期性的)執行,在一定時間內一些shell腳本

回答

4

使用at

您在使用at顯示正確。該命令將在未來2分鐘執行。該命令不會重複執行,這就是爲什麼在now + 2 minutes計算結果的時間以外的任何時間文件都沒有被觸摸。

如果您在at運行命令時遇到問題,請確保已啓用atrun Launch Control代理程序並運行。有關更多信息,請參閱man atrun

更好的調度命令執行

如果你只是想在登錄時則系統預置>用戶>登錄項是個好地方的東西執行。如果你這樣做,用.command作爲它們的擴展名重命名你的shell腳本。我不確定是否需要,但操作系統似乎更喜歡這樣的腳本。

否則請嘗試cron以提供對作業執行的更多控制或使用launchd,mac啓動控制守護進程(請參閱man launchdman launchctl)。閱讀this blog post這似乎是使用OS X啓動控制守護程序的一個很好的介紹。

Launchd是在Mac上安排命令的首選方式,在這裏我只提及cron,因爲如果您來自Linux背景,它可能更爲熟悉。請參閱this answer瞭解更多關於此的詳細信息。

+0

最後我通過手冊頁「atrun」的步驟解決問題。默認情況下,「at」在osx中​​不可用。無論如何,謝謝你的回答和想法! – taoch

4

我注意到 「另請參閱」 中的手冊頁:

SEE ALSO 
nice(1), sh(1), umask(2), campact(5), atrun(8), cron(8), sendmail(8) 

在獲得atrun(8),提供了一種解決方案。

Execute the following command as root to enable atrun: 
launchctl load -w 
/System/Library/LaunchDaemons/com.apple.atrun.plist 

之後我sudo這個命令,然後重新啓動我的電腦,變得可用。

+1

似乎不需要重新啓動。 –