如果Launchd今天没有运行,请运行alternate命令

时间:2015-04-28 12:51:32

标签: macos launchd

问题简介:

  • 当我的笔记本电脑在晚上11点关闭时,launchd不会运行命令srd exec
  • 如果Launchd在第二天开始运行时运行该命令,则应该运行srd exec -y

解释

我有一个配置了Lingon的Launchd,每天晚上11点在我的OSX 10.10笔记本电脑上运行Sifttter Redux。通常情况下,笔记本电脑在此时关闭,否则命令会成功运行并带有预期结果。它也将根据终端的需求按预期运行。

鉴于此应用程序的目的本质上是一个记录器,从文本文件中的特定日期范围中查找活动并将其聚合到那些日子的第一天条目中,该命令应该每天只运行一次或者其他创建重复的条目。

当我输入srd exec时,会找到今天的信息并将其添加到今天的条目中。当我输入srd exec -y时,会找到昨天的信息并将其添加到昨天的条目中。

还有日期范围的参数。

2 个答案:

答案 0 :(得分:0)

尝试建立日志文件,并在每次代理成功启动时将日期附加到该文件。创建一个检查日志的11:00 AM代理,如果昨天的日期不存在,则启动-y版本,您就完成了。

答案 1 :(得分:0)

我通过创建一个bash脚本解决了这个问题,该脚本检查时间并使用相应的参数执行srd

#!/bin/bash

NOW=$(date +"%H")
echo $(date);
if [[ $NOW == 23 ]]
    then
        /usr/bin/srd exec --verbose
        echo "Sifttter grabbed today's events.";
else
    /usr/bin/srd exec -y --verbose
    echo "Sifttter caught up on yesterday's events.";
fi

当直接从终端运行时,任务运行正常,但是当通过launchd运行时,stdout显示它中途切断,并且显示了sifttter正确的日志invalid byte sequence in US-ASCII

通过向launchd plist添加以下字符声明来解决此问题:

<key>EnvironmentVariables</key>
<dict>
  <key>LANG</key>
    <string>en_US.UTF-8</string>
</dict>