我想在MacOS中执行一次shell脚本。
首先,我在Ubuntu中尝试了“at”命令并且表现良好。 但是当我在MacOS中使用相同的方法时,出现问题
我打字:
$ at now + 2 minutes
ls -al > tmpfile
(ctrl+d,EOF)
工作已成功添加。
“at -l”的输出是:
(some other output)
11 Fri Jul 19 15:18:00 2013
但是在15:18之后,tmpfile没有改变。
我想知道如何在MacOS corectly中使用“at”命令,或者是否有任何其他方法在特定时间执行一次shell脚本(非定期)
答案 0 :(得分:7)
我注意到“请参见”的手册页:
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
在我执行此命令之后,然后重新启动计算机,此时可用。
答案 1 :(得分:4)
at
您对at
的使用似乎是正确的。该命令将在2分钟后执行。该命令不会重复执行,因此除了now + 2 minutes
计算到的时间之外的任何时间都不会触及该文件。
如果您在运行at
命令时遇到问题,请确保已启用atrun
启动控制代理并运行。有关详细信息,请参阅man atrun。
如果您只是想在登录时执行某些操作,那么系统偏好设置> 用户> 登录项是个好地方。如果您这样做,请将.command
作为其扩展名重命名您的shell脚本。我不确定它是否是必需的但是操作系统似乎更喜欢这样的脚本。
否则,请尝试使用cron提供对作业执行的更多控制,或使用launchd
,即mac启动控制守护程序(请参阅man launchd和man launchctl)。阅读this blog post,这似乎是对使用OS X启动控制守护进程的一个很好的介绍。
Launchd是在mac上安排命令的首选方式,我在这里只提到cron
,因为如果你来自Linux背景可能会更熟悉。请查看this answer了解更多详情关于那个。