如何使用命令“at”在MacOS中执行shell

时间:2013-07-19 07:36:33

标签: macos shell

我想在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脚本(非定期)

2 个答案:

答案 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 launchdman launchctl)。阅读this blog post,这似乎是对使用OS X启动控制守护进程的一个很好的介绍。

Launchd是在m​​ac上安排命令的首选方式,我在这里只提到cron,因为如果你来自Linux背景可能会更熟悉。请查看this answer了解更多详情关于那个。