我有一些自制的启动脚本。但是,当我重新启动计算机时,我必须手动运行它们:
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.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>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.mysql.mysqld</string>
<key>Program</key>
<string>/Users/dash/.local/Cellar/mysql/5.1.49/bin/mysqld_safe</string>
<key>RunAtLoad</key>
<true/>
<key>UserName</key>
<string>dash</string>
<key>WorkingDirectory</key>
<string>/Users/dash/.local/var</string>
</dict>
</plist>
我认为这应该在启动时发生。我错过了什么?
答案 0 :(得分:22)
我发现在你的plist中调试的最佳方式:
<key>StandardErrorPath</key>
<string>/tmp/mycommand.err</string>
<key>StandardOutPath</key>
<string>/tmp/mycommand.out</string>
打开控制台应用程序,在“所有消息”中,您应该在应用程序失败或成功时看到条目。像这样:
4/28/15 10:43:19.938 AM com.apple.xpc.launchd[1]: (mycommand[18704]) Service exited with abnormal code: 1
我遇到的问题是ProgramArguments将每个命令项作为数组中的<string>
项。
编辑:
在我的例子中,为shell脚本生成一个简单的包装器工作得更好。
此脚本设置基本文件夹结构,以将shell脚本转换为OS X“app” - https://gist.github.com/mathiasbynens/674099。这可能更适合您的mysql -u arg1
命令。
答案 1 :(得分:2)
一种可能性:查看目录:
/private/var/db/launchd.db/
并为您的用户填写“com.apple.launchd.peruser。###”文件。打开它,看看是否有类似的条目:
<key>com.mysql.mysqld.plist</key>
<dict>
<key>Disabled</key>
<true/>
</dict>
如果有,请尝试将其设为<false/>
。另一个寻找相同内容的文件是:
/private/var/db/launchd.db/com.apple.launchd/overrides.plist
答案 2 :(得分:1)
start命令需要作业 Label 作为参数,因此您可以使用以下内容启动它...
launchctl start com.myfile.hostname.plist
要停止,只需执行以下操作即可...
launchctl stop com.myfile.hostname.plist
完成所有测试后,您将注销然后加载它,或者如果您的plist文件位于用户库文件夹中,请输入以下内容...
launchctl load ~/Library/LaunchAgents/com.myfile.hostname.plist
答案 3 :(得分:0)
尝试重命名。将文件名更改为:
~/Library/LaunchAgents/com.mysql.mysqld2.plist
和plist中的Label部分:
<key>Label</key>
<string>com.mysql.mysqld2</string>
如果保存备份副本,请确保将其移到〜/ Library / LaunchAgents /目录之外。
最后,不要使用launchctl来加载它,只需注销并重新登录。这将让launchd自己从“LaunchAgents”目录中取出它,并从混合中取出另一个变量(即launchctl)。
答案 4 :(得分:0)
对我来说,其他解决方案到目前为止对我没有帮助。我的问题有点难以调试,因为plist文件正确,脚本在终端中单独运行良好。一切看起来都很好,但是不起作用。
我通过执行检查日志文件
tail -f /var/log/system.log
然后使用以下命令再次卸载并加载服务:
launchctl unload ~/Library/LaunchAgents/example.plist
launchctl load ~/Library/LaunchAgents/example.plist
我从日志文件中发现了一条错误消息:
Program specified by service is not a Mach-O executable file.
这到底是什么意思?我没有谷歌。但是,我觉得这是因为我没有在Shell脚本的开头添加#!/bin/bash
。因为有时候我懒于添加这行。
添加标题后,一切正常。