46

我想在登录时运行在后台运行的同步同步服务。但是我的代理的状态码是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>
4

10 回答 10

52

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

终于搞定了,其实plist里面有错误,推荐安装brew install --cask launchcontrollaunchctl的gui工具,它可以帮助检测错误和排除故障。

于 2015-12-11T06:38:52.883 回答
14

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

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

于 2017-02-13T22:33:43.170 回答
8

要查看所有错误代码的说明,请键入

launchctl error <insert numerical error code here>

例如:

%launchctl 错误 77 77: 没有可用的锁

于 2020-02-19T20:36:25.073 回答
7

[也遇到了这个问题,所以记录下我的发现]

“78”是您正在运行的作业的最后一个退出代码。来自man launchctl

不带参数,在三列中列出加载到 launchd 的所有作业。第一列显示作业的 PID(如果它正在运行)。 第二列显示作业的最后退出状态。如果该列中的数字为负数,则表示停止作业的信号为负数。因此,“-15”表示作业已使用 SIGTERM 终止。第三列是作业的标签。如果指定了 [label],则打印有关请求的作业的信息。

即,无论您开始什么工作,您都需要阅读文档(或源代码)。(在我的情况下,mysqld)

值得注意的是,“78”作为 Linux 上的标准退出代码被提及,表示配置错误。因此,请查看您的作业配置(和错误日志?),看看您是否有错误配置。

于 2016-12-08T13:56:01.073 回答
3

这就是让我着迷的地方:在 Mac OS X 中,即使文件中只有“脚本”,您也可以从命令行运行 shell 脚本。但是,当您从 launchd 运行它们时,您必须告诉哪个二进制文件应该运行脚本。假设当您从命令行运行时,它只使用您当前所在的 shell(在我的情况下为 bash),但是从 launchd 运行时没有“周围脚本”。我添加了

#!/bin/sh

作为脚本文件的第一行,然后它就起作用了。

于 2017-09-26T09:33:44.770 回答
3

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

于 2020-08-04T08:23:20.700 回答
2

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

于 2018-09-04T17:47:01.987 回答
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>

这太糟糕了,绝对是浪费生命……

于 2020-07-25T09:43:44.583 回答
0

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

于 2016-11-15T07:49:20.593 回答
0

我一直在追逐状态 78错误。

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

在这种情况下,使用应用程序 LaunchControl(这很棒)并没有帮助。标准输出和错误文件中没有输出。

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

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

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

于 2021-06-02T10:59:18.690 回答