如何安排每天执行的脚本? [OSX]

时间:2015-06-19 11:05:52

标签: macos unix cron osx-yosemite launchd

我有一个python脚本,我想每天运行,比如说早上9点。但是如果系统当时没有打开,则只要计算机再次打开,脚本就应该运行。

我正在寻找类似[HttpPost] public ActionResult Create(mainModel _mainModel) { var loc = new LearningOut(); loc.Outcomes = GetUserOutcomes(); //if (ModelState.IsValid) Remove this comment if you want to validate { db.Courses.Add(_mainModel.course); db.LearningOut.Add(_mainModel.learningout); db.SaveChanges(); return RedirectToAction("Create", new { id = learningout.LearningOutID }); } return View(loc); } 的内容。

我怎样才能做到这一点? Cron工作不符合我的目的。

2 个答案:

答案 0 :(得分:3)

创建一个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>

请注意,虽然守望者的错过运行将在下一次机会中弥补,但它会合并&#34;多次错过跑。例如,如果计算机已关闭5天,守护程序将在最终启动时运行一次。

答案 1 :(得分:1)

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

一些可能有用的提示:

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