Macos 如果Launchd今天未运行,请运行备用命令

Macos 如果Launchd今天未运行,请运行备用命令,macos,launchd,Macos,Launchd,问题简介: 当我的笔记本电脑在晚上11点关机时,launchd不会运行命令srd exec 如果Launchd在我第二天开始时运行该命令,它应该改为运行srd exec-y 说明: 我有一个配置了Lingon的Launchd,每天晚上11点在我的OSX 10.10笔记本电脑上运行。通常情况下,此时笔记本电脑处于关闭状态,否则该命令会成功运行并获得预期结果。它还将根据终端的需求按预期运行 鉴于此应用程序的用途本质上是一个记录器,从文本文件中的特定日期范围查找活动,并将其聚合为这些天的第一天条目

问题简介:

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

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

鉴于此应用程序的用途本质上是一个记录器,从文本文件中的特定日期范围查找活动,并将其聚合为这些天的第一天条目,因此每天只应运行一次命令,否则将创建重复条目

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


还有日期范围的参数。

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

我通过创建一个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
当直接从终端运行时,任务正常运行,但当run-through启动时,stdout显示它在中途被切断,并且筛选器正确日志显示为US-ASCII中的无效字节序列

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

<key>EnvironmentVariables</key>
<dict>
  <key>LANG</key>
    <string>en_US.UTF-8</string>
</dict>
环境变量
朗
en_US.UTF-8

我创建了一个bash脚本,它检查时间并使用相应的参数执行
srd
。当直接从终端运行时,任务正常运行,但当运行通过launchd时,标准输出显示中途中断,并且
siftter
property日志显示US-ASCII中的
无效字节序列。根据此问题,在向我的launchd plist添加语言规范时找到了修复方法:。很好!这比日志文件要好。