【问题标题】:OS X LaunchAgent WatchPaths does not work, have a PID and no error messageOS X LaunchAgent WatchPaths 不起作用,有 PID 并且没有错误消息
【发布时间】:2013-01-27 14:44:32
【问题描述】:

我编写了一个小型 LaunchAgent 来监视文件夹的变化并在发生变化时触发 shell 脚本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//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.w2</string>
    <key>ProgramArguments</key>
    <array>
    <string>/Users/myusername/Desktop/alert</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Users/myusername/Personnel</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/Users/myusername</string>
    <key>StandardErrorPath</key>
    <string>myjob.log</string>
    <key>StandardOutPath</key>
    <string>myjob.log</string>
    <key>Debug</key>
    <true/>
    <key>WaitForDebugger</key>
    <true/>

</dict>
</plist>
  • 文件名与标签相同
  • 我使用 Launchctl 加载和启动代理
  • 我退出/登录了我的会话
  • 我检查了 Launchctl 列表,代理的 PID 正确,状态码为 0
  • 我所有的 URL 都是绝对的

尽管它没有按预期工作:我在监视文件夹中添加了一个文件并且脚本没有被触发。

日志文件已创建但为空(没有错误?)

如果有人能指出正确的方向,那就太棒了。

【问题讨论】:

  • /Users/myusername/Desktop/alert 是您要运行的脚本吗?
  • @chepner 是的,它是脚本

标签: bash plist osx-mountain-lion launchd


【解决方案1】:

由于您将RunAtLoad 选项设置为true,因此您的脚本会在您登录后立即启动。你是说你在launchctl list 输出中看到了一个PID。这意味着对于已启动的代理,代理已经在运行,无需再次运行。

我建议删除RunAtLoad 键或使/Users/myusername/Desktop/alert 脚本快速退出。您将在launchctl list 输出的PID 列中看到- 符号。

【讨论】:

    【解决方案2】:

    要检查两件事:

    1. 删除“WaitForDebugger”键。 (至少,删除它使我能够进行有效的测试。显然,它有一个目的,但我无法建议如何将调试器附加到您的进程。)

    2. 确保/Users/myusername/Desktop/alert 是可执行的(chmod +x /Users/myusername/Desktop/alert

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多