我如何让脚本在 Mac OS X 上每天运行?

我如何让脚本在 Mac OS X 上每天运行?

Cron?启动了?愛爾蘭??

如果是,怎么办?

答案1

作为参考,这 3 个选项都可以使用。但是 iCal 选项的限制比其他选项更多。

(如其他答案中提到的,有用于编辑 cron 和 launchd 的 GUI)

Cron 是最直接和最知名的,并且有许多教程可用。Coles Notes 是将下面最后一行添加到您的 crontab(通过编辑或在命令行上/etc/crontab使用):crontab

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 身份运行 launchd 命令?)至于您想要保存配置文件(plist 文件)的位置,因为它的运行取决于它存储在哪个目录中以及如何加载它(例如,您是否使用了 sudo) - 类似于 cron。

以下是每日运行的 launchd 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>

还值得注意的是,如果将 launchd 任务安排在计算机睡眠或关闭时执行,则它们将在计算机再次可用时(打开或唤醒计算机)运行 - 但无论过了多少天,都只会运行一次。编辑:我刚刚看到一份 Apple 文档,上面说如果机器关闭,那么您将丢失该时间内的任何启动事件(您的脚本将不会在启动时启动),(睡眠会在唤醒时启动脚本)


另一个选择是使用““(使用“man at”检查手册页)。脚本可以自行重新安排,例如:

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

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

您可能必须先启动相应的守护进程(atrun)(请参阅https://superuser.com/a/43680):

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

优点:快速修复,不需要 sudo/root 访问权限,易于执行复杂的计划模式缺点:不是 OS X 的标准计划方法(即 launchd)

答案2

启动控制是 launchd/launchctl 的另一个 GUI。虽然其他人提到的替代方案完全能够每天启动脚本,但使用 LaunchControl 您可以配置复杂的时间表(例如“每周一到周五一次,周末下午 2 点到晚上 8 点之间每小时一次”)。而且它(据我所知)是唯一真正验证作业的工具。如果作业没有按预期工作,它会向您显示原因。

您可以免费试用任意长的时间。

答案3

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

答案4

如果你想尝试免费的,我建议黎明前的任务

在此处输入图片描述

http://www.macupdate.com/app/mac/33283/task-till-dawn

相关内容