Osx

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

  • October 31, 2018

我編寫了一個 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是正確的實用程序嗎?如果是這樣,我怎樣才能讓它在這裡做我想做的事情?

讓我們看看,在 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 片…)

引用自:https://unix.stackexchange.com/questions/407181