我无法让 XAMPP 在 OS X 中自动启动

我无法让 XAMPP 在 OS X 中自动启动

我无法让 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

相关内容