如何使用“at”安排腳本在 macOS 上執行?

如何使用“at”安排腳本在 macOS 上執行?

我編寫了一個 Python 腳本,需要在另一個腳本運行後的某個時間執行該腳本。我找到了該at命令,經過一番挖掘後,我嘗試了以下命令(為了方便閱讀,分成多行):

/private/var/folders/w9/6q0rjl6n4yv859fpxbg4123w0000gn/T/S10/fm-git.py
--filename chiv-lib --repository /Users/chuck/Projects/chivalry/chiv-lib/
--path Chivalry/ --comment "test" | at 2:52pm

這立即運行了腳本。所以我嘗試了

at 2:53pm
> /private/var/folders/w9/6q0rjl6n4yv859fpxbg4123w0000gn/T/S10/fm-git.py
> --filename chiv-lib --repository /Users/chuck/Projects/chivalry/chiv-lib/
> --path Chivalry/ --comment "test"
> ^D

但時間來了又去,腳本並沒有執行。經過上述處理後,at -l輸出如下:

13  Mon Nov 27 02:53:00 2017
12  Mon Nov 27 14:52:00 2017

這是在 macOS High Sierra 上。at這是正確的實用程式嗎?如果是這樣,我怎麼能讓它在這裡做我想做的事?

答案1

讓我們看看,在 Mac OS X 上(因為這個硬體太舊了,無法運行 macOS)加上myat因為我永遠不記得日期格式at想要...

$ date
domingo, 26 de noviembre de 2017, 16:34:12 PST
$ myat 16:36
touch $HOME/nananananananananananananananana-atran
job 2 at Sun Nov 26 16:36:00 2017
$ atq
1       Wed Mar  9 08:00:00 2016
2       Sun Nov 26 16:36:00 2017
$ 

……為什麼還有 2016 年的工作?

$ date
domingo, 26 de noviembre de 2017, 16:36:33 PST
$ atq
1       Wed Mar  9 08:00:00 2016
2       Sun Nov 26 16:36:00 2017
$ 

呃……也許手冊頁at會有幫助?

IMPLEMENTATION NOTES
     Note that at is implemented through the launchd(8) daemon periodically
     invoking atrun(8), which is disabled by default.  See atrun(8) for infor-
     mation about enabling atrun.

同時,atrun(8)我們發現...

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

天哪。讓我們嘗試一下...

$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

然後我們等一兩分鐘......

$ atq
$ ls *atran
nananananananananananananananana-atran
$ 

打開後看起來不錯(警告可能會耗盡電池或寶貴的 CPU 片...)

相關內容