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

tao*_*och 6 macos shell

我想在MacOS中执行一次shell脚本.

起初,我在Ubuntu中尝试了"at"命令并且运行良好.但是当我在MacOS中使用相同的方法时,事情就出错了

我键入:

$ at now + 2 minutes
ls -al > tmpfile
(ctrl+d,EOF)
Run Code Online (Sandbox Code Playgroud)

这项工作成功添加.

"at -l"的输出是:

(some other output)
11         Fri  Jul  19  15:18:00  2013
Run Code Online (Sandbox Code Playgroud)

但是在15:18之后,tmpfile没有改变.

我想知道如何在MacOS corectly中使用"at"命令,或者是否有任何其他方法在特定时间执行一些shell脚本(非定期)

tao*_*och 7

我在人工页面注意到"另请参见":

SEE ALSO
nice(1), sh(1), umask(2), campact(5), atrun(8), cron(8), sendmail(8)
Run Code Online (Sandbox Code Playgroud)

在atrun(8)中,提供了一种解决方案.

Execute the following command as root to enable atrun:
launchctl load -w
/System/Library/LaunchDaemons/com.apple.atrun.plist
Run Code Online (Sandbox Code Playgroud)

在我sudo这个命令,然后重新启动我的电脑后,变得可用.

  • 似乎不需要重启. (2认同)

Wil*_*ill 4

使用at

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

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

更好地安排命令执行

如果您只想在登录时执行某些操作,那么“系统偏好设置” > “用户” > “登录项”是一个好地方。.command如果您这样做,请重命名您的 shell 脚本作为其扩展名。我不确定是否需要它,但操作系统似乎更喜欢这种脚本。

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

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