如何每周末运行一次launchd任务?

如何每周末运行一次launchd任务?

我正在尝试将 ruby​​ 程序作为 cron 运行。我已经弄清楚了如何从 launchd 运行 ruby​​ 程序,问题是我不知道如何说“每周日运行一次作业”。下面是我的 .plist 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableGlobbing</key>
    <false/>
    <key>Label</key>
    <string>ScratchFolders.job</string>
    <key>ProcessType</key>
    <string>Background</string>
    <key>Program</key>
    <string>/usr/local/rvm/wrappers/scratch-monitor/ruby</string>
    <key>ProgramArguments</key>
    <array>
        <string></string>
        <string>scratch-clean.rb</string>
    </array>
    <key>StandardErrorPath</key>
    <string>/tmp/ScratchFolders.job.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/ScratchFolders.job.out</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Weekday</key>
            <integer>7</integer>
        </dict>
    </array>
    <key>WorkingDirectory</key>
    <string>~/automation-scripts/</string>
</dict>
</plist>

答案1

第一个也是最大的问题是你错误地使用了ProgramProgramArguments键。它们相当令人困惑,因为它们对应于 的前两个参数execvp,除非你理解execvp,否则你将无法正确理解这些键。但在大多数情况下,有一个简单的方法可以做到这一点:不要使用Program,而是将程序的完整路径放在 中的第一个字符串中ProgramArguments

<key>ProgramArguments</key>
<array>
    <string>/usr/local/rvm/wrappers/scratch-monitor/ruby</string>
    <string></string>
    <string>scratch-clean.rb</string>
</array>

(注意:我假设您尝试向程序传递一个空白的第一个参数——如果不是,请删除<string></string>。)

我看到的第二个问题是WorkingDirectory关键——我很确定它不会~在这个上下文中扩展,所以你需要明确指定完整路径:

<key>WorkingDirectory</key>
<string>/Users/chan/automation-scripts/</string>

最后,我认为您可能还需要指定开始的小时和分钟:

<key>StartCalendarInterval</key>
<dict>
    <key>Weekday</key>
    <integer>7</integer>
    <key>Hour</key>
    <integer>3</integer>
    <key>Minute</key>
    <integer>15</integer>
</dict>

相关内容