7

我想在 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 中正确使用“at”命令,或者是否有任何其他方法可以在某个时间执行某些 shell 脚本一次(不是定期)

4

2 回答 2

8

我在以下位置的手册页中注意到“SEE ALSO”:

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

在我 sudo 这个命令之后,然后重新启动我的计算机,就可以使用了。

于 2013-07-23T09:13:13.647 回答
4

使用at

您的使用at似乎是正确的。该命令在未来 2 分钟执行。该命令不会重复执行,这就是为什么除了now + 2 minutes评估时间之外的任何时间都不会触及文件的原因。

如果您在运行命令时遇到问题,at请确保您已atrun启用并运行启动控制代理。有关这方面的更多信息,请参阅man atrun 。

更好的计划命令执行

如果您只想在登录时执行某些操作,那么System Preferences > Users > Login Items是一个好地方。.command如果你这样做,重命名你的 shell 脚本作为它们的扩展名。我不确定它是否是必需的,但操作系统似乎更喜欢这样的脚本。

否则,请尝试 cron 以提供对作业执行或使用launchdmac 启动控制守护程序的更多控制(请参阅man launchdman launchctl)。阅读这篇博文,它似乎很好地介绍了 OS X 启动控制守护程序的使用。

Launchd 是在 mac 上调度命令的首选方式,我cron在这里只提一下,因为如果您来自 Linux 背景,它可能会更熟悉。查看此答案以获取更多详细信息。

于 2013-07-19T08:13:10.257 回答