简体   繁体   中英

RabbitMQ doesn't start using launchd

I use a MacPorts ecosystem and the rabbitmq-server port is really old and it doesn't work anymore. So I have installed rabbitmq-server on Mac OS X Sierra, using Generic Unix release . It works.

RabbitMQ is installed under /usr/local/rabbitmq_server-3.6.5/ and there are symlinks for all the executables under /usr/local/sbin/ .

ls -al
total 40
drwxr-xr-x  7 root  wheel  238 Sep 24 19:50 .
drwxr-xr-x  8 root  wheel  272 Sep 24 19:30 ..
lrwxr-xr-x  1 root  wheel   55 Sep 24 19:50 rabbitmq-defaults -> /usr/local/rabbitmq_server-3.6.5/sbin/rabbitmq-defaults
lrwxr-xr-x  1 root  wheel   50 Sep 24 19:50 rabbitmq-env -> /usr/local/rabbitmq_server-3.6.5/sbin/rabbitmq-env
lrwxr-xr-x  1 root  wheel   54 Sep 24 19:50 rabbitmq-plugins -> /usr/local/rabbitmq_server-3.6.5/sbin/rabbitmq-plugins
lrwxr-xr-x  1 root  wheel   53 Sep 24 19:50 rabbitmq-server -> /usr/local/rabbitmq_server-3.6.5/sbin/rabbitmq-server
lrwxr-xr-x  1 root  wheel   49 Sep 24 19:50 rabbitmqctl -> /usr/local/rabbitmq_server-3.6.5/sbin/rabbitmqctl

When I run the RabbitMQ server, everything works like expected:

sudo rabbitmq-server
Password:

          RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.
##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
##  ##
##########  Logs: /usr/local/rabbitmq_server-3.6.5/var/log/rabbitmq/rabbit@MacBookPro.log
######  ##        /usr/local/rabbitmq_server-3.6.5/var/log/rabbitmq/rabbit@MacBookPro-sasl.log
##########
          Starting broker...
completed with 6 plugins.

To start the daemon automatically I have created a file com.rabbitmq.rabbitmq-server.plist that I have placed under /usr/local/etc/LaunchDaemons . I have also created a symlink to this file in /Library/LaunchDaemons . The owner is root and the group is wheel .

ls -al
total 88
drwxr-xr-x  13 root  wheel   442 Sep 24 19:51 .
drwxr-xr-x+ 61 root  wheel  2074 Sep 23 14:33 ..
lrwxr-xr-x   1 root  wheel   103 Dec 11  2015 com.oracle.java.Helper-Tool.plist -> /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Resources/com.oracle.java.Helper-Tool.plist
lrwxr-xr-x   1 root  wheel    63 Sep 24 19:16 com.rabbitmq.rabbitmq-server.plist -> /usr/local/etc/LaunchDaemons/com.rabbitmq.rabbitmq-server.plist
lrwxr-xr-x   1 root  admin    66 Sep 12 10:04 org.freedesktop.dbus-system.plist -> /opt/local/Library/LaunchDaemons/org.freedesktop.dbus-system.plist
lrwxr-xr-x   1 root  admin    76 Sep 23 16:40 org.macports.OpenSSH.plist -> /opt/local/etc/LaunchDaemons/org.macports.OpenSSH/org.macports.OpenSSH.plist
lrwxr-xr-x   1 root  admin    76 Sep 20 20:43 org.macports.apache2.plist -> /opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist
lrwxr-xr-x   1 root  admin    80 Sep 13 00:46 org.macports.memcached.plist -> /opt/local/etc/LaunchDaemons/org.macports.memcached/org.macports.memcached.plist
lrwxr-xr-x   1 root  admin    90 Sep 23 16:33 org.macports.mysql56-server.plist -> /opt/local/etc/LaunchDaemons/org.macports.mysql56-server/org.macports.mysql56-server.plist
lrwxr-xr-x   1 root  admin    72 Sep 23 15:17 org.macports.redis.plist -> /opt/local/etc/LaunchDaemons/org.macports.redis/org.macports.redis.plist
lrwxr-xr-x   1 root  admin    74 Sep 23 15:19 org.macports.rsyncd.plist -> /opt/local/etc/LaunchDaemons/org.macports.rsyncd/org.macports.rsyncd.plist
lrwxr-xr-x   1 root  admin    72 Sep 12 18:00 org.macports.slapd.plist -> /opt/local/etc/LaunchDaemons/org.macports.slapd/org.macports.slapd.plist
lrwxr-xr-x   1 root  wheel    84 May 25 03:58 org.macports.supervisord.plist -> /opt/local/etc/LaunchDaemons/org.macports.supervisord/org.macports.supervisord.plist

Here is the plist file content:

<?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.rabbitmq.rabbitmq-server</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/sbin/rabbitmq-server</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>EnvironmentVariables</key>
  <dict>
    <key>PATH</key>
    <string>/usr/local/sbin:/usr/bin:/bin:/usr/local/bin</string>
  </dict>
</dict>
</plist>

When I try to load the plist file using

sudo launchctl load -w /Library/LaunchDaemons/com.rabbitmq.rabbitmq-server.plist 

I don't get any error, but the daemon doesn't start. I have even tried to add debug information to the plist, but the log doesn't show any error. What am I doing wrong?

Well, it wasn't easy but I have finally found a solution myself.

This is the final com.rabbitmq.rabbitmq-server.plist script:

<?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>com.rabbitmq.rabbitmq-server</string>
  <key>ProgramArguments</key>
  <array>
    <string>/opt/local/bin/daemondo</string>
    <string>--label=rabbitmq-server</string>
    <string>--start-cmd</string>
    <string>/usr/local/sbin/rabbitmq-server</string>
    <string>-u</string>
    <string>nobody</string>
    <string>;</string>
    <string>--pid=exec</string>
  </array>
  <key>Disabled</key><true/>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>EnvironmentVariables</key>
  <dict>
    <key>HOME</key>
    <string>/usr/local/rabbitmq_server-3.6.5</string>
    <key>PATH</key>
    <string>/usr/local/sbin:/usr/bin:/bin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/usr/local/rabbitmq_server-3.6.5/sbin</string>
  </dict>
  <key>StandardOutPath</key>
  <string>/var/log/rabbit-launchd.log</string>
  <key>StandardErrorPath</key>
  <string>/var/log/rabbit-launchd-error.log</string>
</dict>
</plist>

I have used daemondo from MacPorts to run the rabbitmq-server executable. Than I have updated the PATH variable. Using the StandardErrorPath I have figured out that ErLang couldn't find the executable home dir: I got, in fact, this error:

erlexec: HOME must be set

So I have added HOME to the EnvironmentVariables section.

If you relay on MacPorts and you don't use Homebrew, you can use this script to run RabbitMQ server using launchd and installing the Generic Unix release.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM