如何使用“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 片......)

相关内容