【问题标题】:How to schedule a script which executes daily? [OSX]如何安排每天执行的脚本? [OSX]
【发布时间】:2015-09-05 08:17:48
【问题描述】:

我有一个 python 脚本,我想每天早上 9 点运行它。但是如果当时系统没有启动,那么脚本应该会在计算机重新启动后立即运行。

我正在寻找类似anacron 的东西。

我怎样才能做到这一点? Cron 作业无法实现我的目的。

【问题讨论】:

  • @a_horse_with_no_name '脚本一启动就运行。'
  • 您可能想重新表述您的问题,因为我不确定您在问什么。从现在看来,您似乎希望脚本即使在机器关闭时也能运行,这显然是不可能的。
  • @NormanGray 对此感到抱歉。我已经编辑了这个问题。基本上我想如果系统在执行作业时没有打开,它会在计算机再次打开后立即运行脚本。

标签: macos unix cron osx-yosemite launchd


【解决方案1】:

创建一个Launch Daemon 文件,将其所有权设置为root:wheel 并将权限设置为644,并将其放置在/Library/LaunchDaemons 中。该文件至少应包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.maintenance</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/your/script</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>9</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

请注意,虽然错过的守护程序运行将在下一次机会时弥补,但它会“合并”多个错过的运行。例如,如果计算机关闭 5 天,则守护程序将在最终启动时运行一次。

【讨论】:

    【解决方案2】:

    戈登的回答是对的; launchd 将完成工作。

    一些可能会有所帮助的提示:

    • 请注意启动守护程序(它们在启动时运行)和启动代理(它们在登录时运行)之间的区别。基本上,您是否希望脚本仅在您已经登录时才运行?这篇文章很有帮助:http://www.grivet-tools.com/blog/2014/launchdaemons-vs-launchagents/
    • 使用 LaunchControl http://www.soma-zone.com/LaunchControl/。它是一个 GUI,可帮助您管理工作并简化处理 plist。有了它,只需创建一个新的用户代理(或全局守护程序),用“StartCalendarInterval”指定一天中的时间,它就可以工作了。如果没有,LaunchControl 也会帮助您进行调试(通过帮助您处理标准错误和标准输出)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2018-11-11
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多