我无法让 XAMPP 在 OS X 启动时启动。我研究这个问题已经有一段时间了,但一直没有成功。XAMPP 需要以 root 身份启动,我不想将 root 密码存储在某个脚本中,然后使用帐户首选项窗格中的“登录项”来启动 xampp。是的,这样可以,但这不是正确的方法。
我正在尝试使用 launchd / users damons / LaunchDaemons 启动它。这包括在“/Library/LaunchDaemons”目录中创建一个 plist 文件。
我创建了一个名为的文件xampp.startapache.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 版本="1.0"> <字典> <key>启用交易</key> <真/> <key>标签</key> <string>xampp.startapache</string> <键> ProgramArguments </键> <数组> <string>/应用程序/XAMPP/xamppfiles/xampp</string> <string>启动apache</string> </数组> <键> RunAtLoad </键> <真/> <key>工作目录</key> <string>/应用程序/XAMPP/xamppfiles</string> </字典> </plist>
这是概述这里以及其他几个类似的帮助页面。我尝试过手动编辑文件,也尝试过使用 Lingon。但就是不起作用!我甚至尝试过对位于同一目录中的脚本文件进行类似的输入,这会将时间回显到日志文件中。日志文件只是空白的 - 就像脚本没有运行一样。
我怎样才能让它工作?
答案1
以下是我最终得到的结果:
创建这两个文件:
/库/LaunchDaemons/xampp.sql.startapache.plist /库/LaunchDaemons/xampp.startapache.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 版本="1.0"> <字典> <key>启用交易</key> <真/> <key>标签</key> <string>xampp.startapache.mysql</string> <键> ProgramArguments </键> <数组> <string>/应用程序/XAMPP/xamppfiles/xampp</string> <string>启动mysql</string> </数组> <键> RunAtLoad </键> <真/> <key>工作目录</key> <string>/应用程序/XAMPP/xamppfiles</string> <键> KeepAlive </键> <false/> <key>放弃进程组</key> <真/> </字典> </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 版本="1.0"> <字典> <key>启用交易</key> <真/> <key>标签</key> <string>xampp.startapache</string> <键> ProgramArguments </键> <数组> <string>/应用程序/XAMPP/xamppfiles/xampp</string> <string>启动apache</string> </数组> <键> RunAtLoad </键> <真/> <key>工作目录</key> <string>/应用程序/XAMPP/xamppfiles</string> <键> KeepAlive </键> <false/> <key>放弃进程组</key> <真/> </字典> </plist>
我必须有两个,因为当我没有 sql 时,mysql 无法启动,但 apache 可以。这可能是因为我启用了 SSL 或类似原因。无论如何,拥有它们两个为我解决了问题,而且我确实使用 Console.app 在启动 apache 时检查错误消息 - 这也很有帮助。
答案2
我怀疑您违反了 launchd 对其启动的程序的期望。它的主要目的不是用于那些只需运行的程序,而是用于那些需要运行并保持活动状态的程序——因此,当xampp startapache
完成时,launchd 会对自己说“天哪,它退出了,我最好清理残余并启动一个新实例”……我还没有用 xampp 测试过,但我怀疑在 .plist 中添加键以告诉它不要重新启动(KeepAlive=false)并且不要清理生成的子进程(AbandonProcessGroup=true)会起作用:
<key>KeepAlive</key>
<false/>
<key>AbandonProcessGroup</key>
<true/>
答案3
我自己也有同样的问题,虽然 cwd 的答案有效,但它过于复杂。我认为关键是将 AbandonProcessGroup 设置为 true。我在 OS X 10.9 中用这个单一启动守护程序实现了它。
<?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>org.xampp.server</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/XAMPP/xamppfiles/xampp</string>
<string>start</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
答案4
这对我有用:mipadi 的第一个答案最终解决了我的问题https://stackoverflow.com/questions/8014500/macosx-autostart-mysql-on-boot 我首先执行了 localhost/dashboard/docs/auto-start-xampp.html 然后通过执行此操作启动我的 sql
mkdir -p ~/Library/LaunchAgents
cp `brew --prefix mysql`/*mysql*.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/*mysql*.plist