编辑:解决了!在 XML 中的每个“分钟”之后都有一个额外的“>”。谢谢迪凯。
我正在尝试设置一个 python 脚本,每天在凌晨 1 点、上午 9 点和晚上 7 点运行 3 次。我打算使用正在工作的 cron,但是如果我的计算机在其中一个时间处于睡眠状态,我仍然希望在我再次打开计算机时运行该作业。cron 不这样做,但显然 launchd 应该这样做,但我遇到了问题。它会在正确的时间开始执行我的工作,但它会每分钟执行一次,我只希望它运行一次。
这是 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>Label</key>
<string>com.test</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python</string>
<string>/Users/myname/helloworld.py</string>
</array>
<key>StandardOutPath</key>
<string>/Users/myname/log.txt</string>
<key>StandardErrorPath</key>
<string>/Users/myname/log.txt</string>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>1</integer>
<key>Minute></key>
<integer>0</integer>
</dict>
<dict>
<key>Hour</key>
<integer>9</integer>
<key>Minute></key>
<integer>0</integer>
</dict>
<dict>
<key>Hour</key>
<integer>19</integer>
<key>Minute></key>
<integer>0</integer>
</dict>
</array>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
在这种情况下,helloworld.py 只是一个包含print 'Hello world'
. 但它每分钟都会执行一次,而我只想让它执行一次。
This question with a similar name Launchd job running every minute这表明阵列功能直到 OS X 10.5 才添加,我必须将这三个时间放入单独的 plist 文件中,但我尝试了一个只有一个文件的文件时间,它也没有工作,我正在运行 Mountain Lion (OS X 10.8.3),所以它不应该是一个问题。我已经看到与 TimeOut 和 ExitTimeOut 相关的其他建议,但我不确定这些是否相关。
我怎样才能让它只运行一次程序,直到接下来的 8 小时?