擅长:python、mysql、java
<p>听起来脚本内部有一些环境依赖性——本质上,它假设它运行的环境是正确的,当您手动运行它时是正确的,但当launchd运行它时则不是。如果对剧本一无所知,很难指出这可能是什么,但我可以提出一些建议:</p>
<ul>
<li><p><code>sudo launchctl</code>不是更强大的<code>launchctl</code>版本,它做了一些明显不同的事情。你需要弄清楚你想要哪一个,然后使用它。</p>
<p>当您以普通用户身份运行<code>launchctl</code>(例如<code>launchctl load</code>)时,它会与launchd的用户实例交互,以管理启动代理(在用户会话中运行的项目,在您的用户标识下)。</p>
<p>当您以根用户身份运行<code>launchctl</code>(例如<code>sudo launchctl load</code>)时,它将与launchd的系统实例交互,以管理启动守护程序——在系统上下文中以根用户身份运行的项。</p>
<p>你必须根据这个脚本的功能来决定哪个是合适的。</p></li>
<li><p>检查system.log(您可以使用控制台实用程序查看它,或者<code>tail -f /var/log/system.log</code>),看看它是否包含任何指示脚本失败原因的内容。</p></li>
<li><p>将条目添加到launchd.plist以记录脚本的输出,并查看其中是否包含任何错误消息或其他错误指示:</p>
<pre><code><key>StandardOutPath</key>
<string>/tmp/turtle.out</string>
<key>StandardErrorPath</key>
<string>/tmp/turtle.err</string>
</code></pre>
<p>编辑脚本以添加调试输出可能会有帮助,因此您可以详细了解它的工作方式(/不工作)。</p></li>
<li><p>脚本是否依赖于特定的工作目录和/或环境变量?如果是,请将适当的<code>WorkingDirectory</code>和/或<code>EnvironmentVariables</code>项添加到.plist。</p></li>
</ul>