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