Aar*_*hen 34 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>
Run Code Online (Sandbox Code Playgroud)
Aar*_*hen 42
我看了man launchctl,找到78个意思function not implemented.它没有多大帮助.
最后我让它工作,实际上plist中有错误,我建议安装brew cask install launchcontrol,这是一个用于launchctl的gui工具,它可以帮助检测错误和故障排除.
我发现错误与权限有关.我试图将错误和日志重定向到/var/log我的用户无法写入的目录.将路径更改为我的用户对r + w具有适当权限的内容.
另外,加载LaunchAgent时要小心.如果您在〜/ Library/LaunchAgents目录中,请不要使用sudo加载plist.
[也谈到这个问题,所以记录我发现的东西]
"78"是您正在运行的作业的最后退出代码.来自man launchctl:
如果没有参数,请列出在三列中加载到launchd中的所有作业.第一列显示作业的PID,如果它正在运行. 第二列显示作业的最后退出状态.如果此列中的数字为负数,则表示停止作业的信号的负数.因此," - 15"表示该作业已被SIGTERM终止.第三列是作业的标签.如果指定了[标签],则打印有关所请求作业的信息.
即,您需要阅读文档(或源代码)以了解您正在开始的任何工作.(就我而言,mysqld)
值得注意的是,"78"被提及作为Linux上的标准退出代码,表示配置错误.那么看看你的工作配置(和错误日志?),看看你是否有错误的配置.
要查看所有错误代码的说明,请键入
launchctl error <insert numerical error code here>
例如:
% launchctl error 77 77: 没有可用的锁
这就是令我着迷的地方:在 Mac OS X 中,即使文件中“只有脚本”,您也可以从命令行运行 shell 脚本。但是,当您从 launchd 运行它们时,您必须告诉哪个二进制文件应该运行该脚本。假设当您从命令行运行时,它只使用您当前所在的 shell(在我的例子中是 bash),但是当从 launchd 运行时,没有“周围脚本”。我添加了
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
作为脚本文件中的第一行,然后它就起作用了。
| 归档时间: |
|
| 查看次数: |
20884 次 |
| 最近记录: |