2 votos

Iniciar el servicio stunnel en el arranque

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

sudo stunnel

Necesito que este comando se ejecute en el arranque, así que he creado un LaunchDaemon pero no funciona. 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 shell script:

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

¿Qué estoy haciendo mal?

EDIT: He hecho lo que todas las respuestas han sugerido hasta ahora, sin suerte todavía. Aquí está mi nuevo archivo launchd:

También he editado 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>

2voto

Nate Puntos 220

Parece que stunnel se pone en segundo plano, es decir, bifurca un subproceso para realizar el trabajo real en segundo plano, y luego sale. Cuando un launchd -Salidas de procesos gestionados, launchd por defecto, elimina automáticamente los subprocesos sobrantes... como el fondo stunnel proceso. No lo he probado, pero hay dos formas sencillas de evitarlo.

En primer lugar, se puede decir launchd no para matar los subprocesos sobrantes añadiendo <key>AbandonProcessGroup</key><true/> al .plist.

En segundo lugar, se puede decir stunnel para no quedar en segundo plano añadiendo foreground = yes a su archivo de configuración. Si hace la segunda opción, probablemente también pueda eliminar <key>KeepAlive</key><false/> de su .plist, y deje que launchd gestionar el stunnel daemon correctamente.

[Actualización] Si eso y las sugerencias de Mark no consiguen que funcione, yo recomendaría añadir alguna salida de depuración en el script, y enviar eso y La salida de stunnel a un archivo de registro. Algo así:

#!/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

Puede hacer cosas similares añadiendo StandardOutPath y StandardErrorPath pero en este caso es más fácil editar el script.

0 votos

@Skyler440: ¡D'oh! Tengo el AbandonProcessGroup al revés, debería ser verdadero y no falso. También he añadido una sugerencia sobre la captura de la salida de depuración del script y stunnel

1voto

yoliho Puntos 340

Hay varias cosas que hay que comprobar aquí, pero esto no es una respuesta directa, ya que no todas ellas pueden ser el problema.

Para un ejemplo de funcionamiento de los macpuertos, véase aquí

  1. Donde está stunnel la ruta no es la misma en launchd que en una sesión de terminal
  2. No puedes tener sudo en el script como ejecutado por Root - sin embargo en este caso no necesitas el script simplemente ejecuta el execrable directamente
  3. El nombre de usuario es Root no Root
  4. ¿Dónde se coloca el archivo plist?

También sugeriría que un demonio no debería ejecutarse al inicio, sino sólo cuando entra una conexión en un socket, pero parece que es así como está escrito el aturdimiento y no un problema de instalación

Aunque al ver este otro respuesta Me sorprende que los archivos plist de ejemplo que he visto funcionen (y mi último comentario es más relevante)

0 votos

Puse el archivo plist en /library/LaunchDaemons

0 votos

La razón por la que ejecuté un script es para que si stunnel intenta arrancar demasiado pronto, el script lo compense añadiendo un retraso para que el sistema arranque

0 votos

No tengo ni idea de dónde está el camino del aturdimiento, ni de cómo encontrarlo. Todo lo que sé es que si ejecuta sudo stunnel desde cualquier lugar stunnel se iniciará

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X