【问题标题】:How to use command "at" to execute shell in MacOS如何使用命令“at”在 MacOS 中执行 shell
【发布时间】:2013-07-19 07:36:33
【问题描述】:

我想在 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 脚本一次(不是周期性的)

【问题讨论】:

    标签: macos shell


    【解决方案1】:

    我在 at 的手册页中注意到“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 这个命令之后,然后重新启动我的电脑,就可以使用了。

    【讨论】:

    • 看来不需要重启了。
    【解决方案2】:

    使用at

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

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

    更好的调度命令执行

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

    否则尝试 cron 以提供对作业执行的更多控制或使用launchd,mac 启动控制守护程序(请参阅man launchdman launchctl)。阅读this blog post,这似乎是对 OS X Launch Control Daemon 使用的一个很好的介绍。

    Launchd 是在 mac 上调度命令的首选方式,我在这里只提到cron,因为如果你来自 Linux 背景,它可能会更熟悉。查看this answer 了解更多详细信息。

    【讨论】:

    • 最后我通过手册页“atrun”的步骤解决了这个问题。默认情况下,“At”在 osx 中不可用。无论如何,感谢您的回答和想法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2014-09-19
    • 2011-01-18
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多