¿Cómo hacer que mosquitto broker se inicie automáticamente en Mac OS (sin homebrew)?

Entiendo que al usar homebrew, se proporcionará un archivo plist y un usuario puede usar launchctl para instalar ese archivo plist.

Pero no estoy usando homebrew (ni macport). Creé binarios de Mosquitto directamente desde la distribución de fuentes de Mosquitto y me gustaría poder iniciar Mosquitto Broker automáticamente (al igual que otros demonios).

Respuestas (1)

El agente de lanzamiento de mosquitos homebrew se ve así:

<?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>homebrew.mxcl.mosquitto</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/opt/mosquitto/sbin/mosquitto</string>
    <string>-c</string>
    <string>/usr/local/etc/mosquitto/mosquitto.conf</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <false/>
  <key>WorkingDirectory</key>
  <string>/usr/local/var/mosquitto</string>
</dict>
</plist>

Dependiendo de su directorio de instalación de mosquitto, modifique las dos cadenas de ruta en ProgramArguments y la ruta de WorkingDirectory .

También modifique la etiqueta a org.user.mosquitto (para evitar futuros conflictos con una posible instalación casera de mosquitto) y luego guarde el archivo como org.user.mosquitto.plist en ~/Library/LaunchAgents/.

Cargue el agente con launchctl load ~/Library/LaunchAgents/org.user.mosquitto.plist.


En determinadas circunstancias (las opciones de instalación que no especificó en su pregunta), puede ser necesario guardar el archivo plist en /Library/LaunchAgents (en lugar de ~/Library/LaunchAgents), modificar los permisos para root:wheel 644 y empezar con:

sudo launchctl load /Library/LaunchAgents/org.user.mosquitto.plist

Ahora puede probar la instalación y asegurarse de que el servidor se está ejecutando correctamente. Abra una nueva ventana de comando e inicie un oyente.

mosquitto_sub -t topic/state

En otra ventana, envíe un mensaje al oyente.

mosquitto_pub -t topic/state -m "Hello World"
gracias. Una cosa que no se menciona en su respuesta es asegurarse de que exista el WorkingDirectory dado en el archivo plist. Otra cosa es que usé launchctl list | grep mosquittoy revisé el primer campo (debe ser un pid válido) para ver si el mosquitto broker se inició con éxito.
@TzunghsingDavidWong Hmm, no lo dije explícitamente sino implícitamente: "Dependiendo de su directorio de instalación de mosquitto, modifique las dos cadenas de ruta en [...] la ruta del WorkingDirectory". ;-)
mi mal... pasó por alto ese punto. En mi caso, no instalé nada. Simplemente recuperé los archivos binarios de mosquitto y las bibliotecas compartidas de una copia de seguridad de la máquina del tiempo y los puse en mi /usr/local. Y simplemente funcionan 8-)