我正在尝试将 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
第一个也是最大的问题是你错误地使用了Program
和ProgramArguments
键。它们相当令人困惑,因为它们对应于 的前两个参数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>