Iniciar el servicio stunnel en el arranque

2

Tengo un servicio ejecutado bajo homebrew. Este servicio se inicia simplemente ejecutando el comando

sudo stunnel

Necesito este comando para ejecutarse en el arranque, así que creé un LaunchDaemon pero no está funcionando. Aquí está el archivo launchd:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple$
<plist version="1.0">
   <dict>
   <key>Label</key>
   <string>com.stunnel.stunnelstartup.plist</string>
   <key>ProgramArguments</key>
   <array>
          <string>/bin/sh</string>
          <string>/usr/local/etc/stunnel/startup.sh</string>
   </array>
   <key>UserName</key>
   <string>ROOT</string>
   <key>RunAtLoad</key>
   <true/>
   <key>KeepAlive</key>
   <false/>
</dict>
</plist>

Y aquí está el script de shell:

#!/bin/bash
#stunnel startup
sleep 30 #Delay added for the system to boot properly
sudo stunnel

¿Qué estoy haciendo mal?

EDITAR: He hecho lo que todas las respuestas han sugerido hasta ahora, aún sin suerte. Aquí está mi nuevo archivo de lanzamiento:

También edité la configuración de stunnel para que no se ejecute en segundo plano

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple$
<plist version="1.0">
   <dict>
   <key>Label</key>
   <string>com.stunnel.stunnelstartup.plist</string>
   <key>Program</key>
   <string>/usr/local/bin/stunnel</string>
   <key>UserName</key>
   <string>root</string>
   <key>RunAtLoad</key>
   <true/>
   <key>AbandonProcessGroup</key>
   <false/>
</dict>
</plist>
    
pregunta Skyler 440 13.05.2016 - 17:41

2 respuestas

2

Parece que stunnel fondos en sí, es decir, solicita un subproceso para realizar el trabajo real en segundo plano, y luego sale. Cuando sale un proceso administrado por launchd , launchd por defecto elimina automáticamente los subprocesos restantes ... como el proceso en segundo plano stunnel . No los he probado, pero hay dos formas simples de evitar esto.

Primero, puedes decirle a launchd not que elimine los subprocesos restantes agregando <key>AbandonProcessGroup</key><true/> a la lista.

Segundo, puedes decirle a stunnel que no se convierta en un segundo plano agregando foreground = yes a su archivo de configuración. Si haces la segunda opción, probablemente también puedas eliminar <key>KeepAlive</key><false/> de tu .plist, y dejar que launchd administre el daemon stunnel correctamente.

[Actualizar] Si eso y las sugerencias de Mark no lo hacen funcionar, recomendaría agregar algunos resultados de depuración en la secuencia de comandos y enviar los resultados de este y stunnel a un archivo de registro. Algo como esto:

#!/bin/bash
#stunnel startup
exec >/tmp/stunnel.log 2>&1 # Send all output to a debug log
sleep 30 #Delay added for the system to boot properly
echo "$(date) - Starting stunnel"
sudo /path/to/stunnel
echo "$(date) - stunnel exited with status $?"
echo

Puedes hacer cosas similares agregando las teclas StandardOutPath y StandardErrorPath , pero en este caso es más fácil editar el script.

    
respondido por el Gordon Davisson 13.05.2016 - 18:00
1

Hay varias cosas que deben verificarse aquí, pero esta no es una respuesta directa, ya que no todas son el problema aquí.

Para ver un ejemplo de trabajo para macports, consulte aquí

  1. Donde está el stunnel, la ruta no es la misma en launchd que en una sesión de terminal
  2. No puede tener sudo en el script como se ejecuta por root, sin embargo, en este caso no necesita el script, simplemente ejecute el execrable directamente
  3. El nombre de usuario es root no ROOT
  4. ¿Dónde colocas el archivo plist?

También sugeriría que no se debe ejecutar un daemon al inicio, pero solo cuando se establece una conexión en un socket, pero parece ser que la forma en que está escrito no es un problema de instalación

Aunque estoy viendo esta otra respuesta , me sorprende que los archivos de ejemplo que he visto funcionen (y mis últimos el comentario es más relevante)

    
respondido por el Mark 13.05.2016 - 18:00

Lea otras preguntas en las etiquetas