launchd状态78是什么意思?为什么我的用户代理没有运行?

时间:2015-12-11 03:15:33

标签: launchd launch-agent

我想在登录时运行在后台运行的同步同步服务。但我的代理的状态代码是78。我不知道为什么,我尝试了一些在线发布的修补程序,但它只是不起作用。

有什么问题?下面是我服务的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>syncmyproject</string>
    <key>StandardOutPath</key>
    <string>/var/log/syncmyproject.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/syncmyproject.log</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>Debug</key>
    <true/>
    <key>EnableGlobbing</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/unison</string>
      <string>-auto</string>
      <string>-batch</string>
      <string>-repeat watch</string>
      <string>~/home/project</string>
      <string>~/project</string>
    </array>
</dict>
</plist>

10 个答案:

答案 0 :(得分:37)

我看了man launchctl,找到78表示function not implemented。它没有多大帮助。

最后我让它工作,实际上plist中有错误,我建议安装brew cask install launchcontrol,它是launchctl的gui工具,它可以帮助检测错误和解决问题。

答案 1 :(得分:6)

我发现错误与权限有关。 我试图将错误和日志重定向到我的用户无法写入的/var/log目录。 将路径更改为我的用户对r + w具有适当权限的路径。

另外,加载LaunchAgent时要小心。如果您在〜/ Library / LaunchAgents目录中,请不要使用sudo加载plist。

答案 2 :(得分:5)

[也遇到这个问题,记录我发现的事情]

&#34; 78&#34;是您正在运行的作业的最后退出代码。来自man launchctl

  

没有参数,列出所有加载到launchd中的作业三个   列。第一列显示作业的PID,如果它运行 -   宁。 第二列显示作业的最后退出状态。如果   此列中的数字为负数,表示负数   停止工作的信号。因此,&#34; -15&#34;表明了   SIGTERM终止了工作。第三列是工作的标签。   如果指定了[标签],则打印有关所请求作业的信息。

即。您需要阅读文档(或源代码)以了解您正在开始的任何工作。 (就我而言,mysqld)

值得注意的是&#34; 78&#34;在Linux上被称为standard exit code,表示配置错误。那么看看你的工作配置(和错误日志?),看看你是否有错误的配置。

答案 3 :(得分:3)

要查看所有错误代码的描述,请输入

launchctl error <insert numerical error code here>

例如:

%launchctl错误77 77:无锁

答案 4 :(得分:1)

这就是抓住我的原因:在Mac OS X中,即使只有脚本&#34在文件中。 但是,当您从launchd运行它们时,您必须告诉应该运行该脚本的二进制文件。 假设当你从命令行运行时它只使用你当前所在的shell(在我的情况下是bash),但是当从launchd运行时,没有&#34;周围的脚本&#34;。 我添加了

#!/bin/sh

作为脚本文件中的第一行,然后就可以了。

答案 5 :(得分:1)

在我的情况下,<ProgramArguments>中的脚本不可执行,因此得到78 function not implemented.

答案 6 :(得分:0)

与上述类似,我的状态是78,因为我的脚本路径中有符号链接。解决方法是使用绝对路径。

答案 7 :(得分:0)

出于78格式的问题,我一直在获取xml代码:

首先,我的emacs像这样自动重新格式化我的xml:

<?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>user.eric.g.autosyncdropbox.agent</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/eric/G/bin/fswatchG.sh</string>
    </array>
    <key>KeepAlive</key>
    <true />
    <key>StandardOutPath</key>
    <string>
    /Users/eric/.tmp/user.eric.g.autosyncdropbox.out.log</string>
    <key>StandardErrorPath</key>
    <string>
    /Users/eric/.tmp/user.eric.g.autosyncdropbox.error.log</string>
  </dict>
</plist>

我找不到返回的这两行...

    <string>
    /Users/eric/.tmp/user.eric.g.autosyncdropbox.out.log</string>
    <key>StandardErrorPath</key>
    <string>
    /Users/eric/.tmp/user.eric.g.autosyncdropbox.error.log</string>

那太糟了,绝对是在浪费生命...

答案 8 :(得分:0)

我一直在寻找 状态 78 错误。

我的 LaunchDamon 可以手动启动,状态为 0 ,但在系统重启后 状态为 78。有时守护程序正在运行,有时没有。

在这种情况下,使用应用 LaunchControl(顺便说一句很棒)没有帮助。 标准输出和错误文件中没有输出。

我可以通过向守护进程添加 KeepAlive 条件来解决问题 plist 文件,引用守护程序可执行文件所在的挂载文件系统。

<key>KeepAlive</key>
<dict>
    <key>PathState</key>
    <dict>
    <key>/Volumes/MountedFileSystem</key>
    <true/>
    </dict>
</dict>

我希望这个提示可以帮助某人。

答案 9 :(得分:-1)

尝试运行mono以启动本地Web服务器时出现此错误。事实证明修复是不使用“which mono”(这是一个符号链接:/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono)给出的单声道路径,而是exe的实际位置(在我的情况下是/Library/Frameworks/Mono.framework/Commands/mono)。