无法从OSX中的启动代理运行终端通知程序(Ruby应用程序)。环境变量问题?

时间:2013-05-17 19:24:01

标签: ruby macos notifications osx-mountain-lion launchd

我想定期弹出一个通知(我有一个“当前任务”,我希望在Pomodoro风格的应用程序中显示)。我正在尝试使用用户启动代理来安排任务,该任务可以成功运行.sh.py脚本。但是,我无法安排terminal-notifier成功启动。其他读取的可能原因是启动代理程序进程的环境变量与通常登录用户的环境不同。

我通过gem install terminal-notifier

安装了终端通知程序
myusername@Nathans-MacBook-Pro~/bin$ which terminal-notifier 
/Users/myusername/.rvm/gems/ruby-2.0.0-p0/bin/terminal-notifier

这是我的shell脚本reminder.sh

#!/bin/sh
date >>/tmp/reminder.log
terminal-notifier -message "message txt" -title "title txt"

直接从终端运行此脚本按预期工作:在reminder.log中记录时间戳,并显示通知弹出窗口。但是,当我尝试通过launch-agent运行它时,它失败了。

我将~/Library/LaunchAgents/文件com.myusername.Reminder.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.myusername.Reminder</string>
    <key>Program</key>
    <string>/Users/myusername/bin/reminder.sh</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>10</integer>
</dict>
</plist>

创建此文件后,我将其加载

launchctl load ~/Library/LaunchAgents/com.myusername.Reminder.plist

和(不确定是否需要,因为它包含RunAtLoad)

launchctl start com.myusername.Reminder

虽然它每隔10秒成功将时间戳记录到文件中,但它不会触发通知。

有关如何成功运行的任何提示?

谢谢!

1 个答案:

答案 0 :(得分:2)

你的假设是对的。 launchd(8)不知道在哪里找到terminal-notifier。简单的解决方案是使用绝对路径调用terminal-notifier。像这样调整shell脚本:

#!/bin/sh
date >>/tmp/reminder.log
/Users/myusername/.rvm/gems/ruby-2.0.0-p0/bin/terminal-notifier -message "message txt" -title "title txt"

或者,您始终可以使用launchd(8)键PATH扩展EnvironmentVariables环境变量。作业定义中的相应部分应如下所示:

<key>EnvironmentVariables</key>
<dict>
    <key>PATH</key>
    <string>/usr/bin:/bin:/usr/sbin:/sbin:/Users/myusername/.rvm/gems/ruby-2.0.0-p0/bin</string>
</dict>