我想在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脚本(非定期)
我在人工页面注意到"另请参见":
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这个命令,然后重新启动我的电脑后,变得可用.
at您的使用at似乎是正确的。该命令在未来 2 分钟执行。该命令不会重复执行,因此除了now + 2 minutes评估时间之外的任何时间都不会触及该文件。
如果您在运行命令时遇到问题,at请确保已atrun启用并运行启动控制代理。有关更多信息,请参阅man atrun 。
如果您只想在登录时执行某些操作,那么“系统偏好设置” > “用户” > “登录项”是一个好地方。.command如果您这样做,请重命名您的 shell 脚本作为其扩展名。我不确定是否需要它,但操作系统似乎更喜欢这种脚本。
否则,请尝试 cron 对作业执行提供更多控制launchd,或使用 mac 启动控制守护进程(请参阅man launchd和man launchctl)。阅读这篇博文,它似乎很好地介绍了 OS X 启动控制守护进程的使用。
Launchd 是在 mac 上调度命令的首选方式,我只cron在这里提到,因为如果您来自 Linux 背景,它可能会更熟悉。请查看此答案以获取更多详细信息。