如何获得每天在Mac OS X上运行的脚本?


Answers:


62

供参考,所有3个选项都可以使用。但是,iCal选项比其他选项有更多限制。

(有用于编辑cron的GUI,如其他答案中所述已启动)

Cron是最简单直接的方法,并且众所周知,并且有许多可用的教程。Coles Notes是将下面的最后一行添加到crontab中(通过编辑/etc/crontabcrontab在命令行上使用):

MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"

在Mac OS X中,cron实际上已被替换,launchdlaunchd向后兼容,cron您仍然可以使用cron它的含义,但实际上它launchd正在完成所有工作。

如果您想使用,launchd还需要在“超级用户”上查看其他问题:(例如,如何以root用户身份运行启动的命令?)关于要将配置文件(plist文件)保存到何处的信息。因为它的运行时间取决于它存储在哪个目录中以及如何加载(例如,是否使用sudo)-与cron类似。

每日运行一个启动的plist示例(请确保文件和标签相同-减去标签的plist)-该脚本每天凌晨3点运行:

<?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.IDENTIFIER_HERE.SOMETHING</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>00</integer>
        <key>Minute</key>
        <integer>03</integer>
    </dict>
</dict>
</plist>

还值得注意的是,如果启动任务是按计划在计算机睡眠或关闭时启动的,它们将在计算机再次可用(打开或唤醒)时运行(尽管无论有多少天都只有一次)是。编辑:我只是在一份Apple文档中说,如果计算机关闭,那么在此期间您将丢失任何启动事件,(您的脚本将不会在启动时启动),(睡眠时会在唤醒时启动脚本)


另一种选择是使用“ at ”(用“ man at”检查手册页)。该脚本可以使用以下方法重新安排自身的时间:

echo "sh $0 $@" | at `date +%H:%M` tomorrow

(使用“ + 10分钟”而不是“明天”每10分钟运行一次;要停止调度,只需执行“在-l”列出已调度的作业ID,然后在“在-r id ”处删除该作业)

您可能必须首先使用(请参阅https://superuser.com/a/43680)启动相应的守护程序(运行):

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

优点:快速修复,无需sudo / root访问,易于执行复杂的计划模式缺点:不是用于OS X的标准计划方法(已发布)


8
先生,对于您启动的配置文件示例,我可以亲吻您。但是我不是。
Paul D. Waite,2010年

5
launchd是在OS X下的路要走
zneak

是的,那是我的印象。听起来确实像是在Tiger中遇到了一些问题,但是苹果从那以后似乎已经对其进行了改进。
Paul D. Waite,2010年

在Os 10.7.4上,没有/ etc / crontab文件。):所以我做了“哪个crontab”,这给了我/ usr / bin / crontab,但这就是一个乱码文件。
2013年

@HermannIngjaldsson / usr / bin / crontab是一个程序;如果在带有的终端中运行它crontab -e,它将带您进入文件的基于终端的文本编辑器,该文件在保存时将成为您的个人crontab。
马克·里德

8

LaunchControl是另一个用于launchd / launchctl的GUI。尽管其他人提到的替代方案完全有能力每天启动脚本,但是使用LaunchControl可以配置复杂的计划(例如“每周日一次,周末在下午2点至晚上8点之间的每个小时”)。它也是(AFAIK)唯一可以实际验证作业的工具。如果一项工作没有按预期进行,它将向您显示原因。

您可以随意尝试任意长时间。


3
虽然可以免费试用/使用,但开发人员希望您为许可证付费。 sites.fastspring.com/somazone/product/shop
肯特,

1
绝对。我之所以首先发布此答案,是为了支持开发人员。
2014年

5

CronniX是一个不错的GUI前端,可用于在Mac上安排cron作业...如果您不想深入研究cron文档,则相当不错。


2
  • 对于iCal,您可能需要阅读这篇文章
  • cron如果您用google搜索,应该会找到足够的教程。

这取决于您想要的内容:仅在您登录后才执行iCal脚本,cron不登录即执行该脚本。如果在打开Mac时应关闭脚本,我不知道iCal是否执行了脚本被执行。cron正在这样做。



2

这是一个简单的免费实用程序,用于生成plist XML:

http://www.gieson.com/Library/projects/utilities/launcha/

使用此工具,无需安装程序,只需将结果保存到Library / LaunchAgents文件夹中即可。


警告:如果使用此工具,请确保将RunAtStart其设置为false(除非您希望它为true)。我花了一个小时弄清楚为什么Finder会冻结并阻止启动时加载桌面。禁用RunAtStart不会干扰固定的计划。
Andrea Lazzarotto

1

我一直为此使用Lingon,但看起来它已经过时了。您可以尝试Crontooie,但我从来没有亲自使用过。或者只是在终端中编辑crontab文件。


在我看来,临贡正在积极发展 ; 当前版本3和先前版本2一起可在AppStore中获得。两者的价格都为数美元,而且收到的评论也很复杂。我个人使用Lingon 3 取得了一些成功,但与其他答案(cron,at等)中提到的其他工具相比,本文不推荐用于此目的。
ssc 2013年

我上次使用Lingon是2年前。当时它对我来说还算不错,但是我还没有使用过最新的版本。太糟糕了,它不像以前那样可靠。
2013年


0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

...您为“ .... cut ....”投入的所有命令行将每五分钟运行一次。

30年的发展历程,“ cron”仍然是我最喜欢的调度程序。

-C


0

如果日历事件满足您的需求,则内置的Automator应用程序还允许您创建由日历事件触发的日历警报。您可以使用一些基于UI的内置操作来执行所需的操作,也可以让它运行某些应用程序或自定义AppleScript,JavaScript或Shell脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.