Avvia il servizio stunnel all'avvio

2

Ho un servizio in homebrew. Questo servizio è semplicemente avviato eseguendo il comando

sudo stunnel

Ho bisogno di questo comando per essere eseguito all'avvio, quindi ho creato un LaunchDaemon ma non funziona. Ecco il file di avvio:

<?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>

Ed ecco lo script della shell:

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

Che cosa sto facendo male ???

EDIT: Ho fatto ciò che tutte le risposte hanno suggerito finora, senza ancora fortuna. Ecco il mio nuovo file launchd:

Ho anche modificato la configurazione di stunnel in modo che non venga eseguita in background

<?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>
    
posta Skyler 440 13.05.2016 - 17:41
fonte

2 risposte

2

Sembra che stunnel sia esso stesso, cioè forca un sottoprocesso per eseguire il lavoro effettivo in background, quindi esce. Quando termina un processo launchd -managed, launchd imposta automaticamente l'eliminazione automatica dei processi secondari rimanenti ... come il processo di background stunnel . Non li ho testati, ma ci sono due semplici modi per evitarlo.

In primo luogo, puoi dire a launchd non di eliminare i sottoprocessi rimanenti aggiungendo <key>AbandonProcessGroup</key><true/> a .plist.

In secondo luogo, puoi dire a stunnel di non fare lo stesso se stesso aggiungendo foreground = yes al suo file di configurazione. Se fai la seconda opzione, probabilmente puoi anche rimuovere <key>KeepAlive</key><false/> da .plist e lasciare che launchd gestisca correttamente il daemon stunnel .

[Aggiorna] Se ciò e i suggerimenti di Mark non funzionano, raccomando di aggiungere qualche output di debug nello script e di inviare quell'output e a un file di log. Qualcosa del genere:

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

Puoi fare cose simili aggiungendo StandardOutPath e StandardErrorPath chiavi, ma in questo caso è più facile modificare lo script.

    
risposta data 13.05.2016 - 18:00
fonte
1

Ci sono diverse cose che devono essere verificate qui, ma questa non è una risposta diretta in quanto non tutte potrebbero essere il problema qui.

Per un esempio operativo per macports vedi qui

  1. Dove si trova stunnel il percorso non è lo stesso in launchd come in una sessione terminale
  2. Non è possibile avere sudo nello script come eseguito da root - tuttavia in questo caso non è necessario lo script, è sufficiente eseguire direttamente execdable
  3. Il nome utente è root non ROOT
  4. Dove metti il file plist?

Suggerirei anche che un daemon non debba essere eseguito all'avvio ma solo quando una connessione arriva su un socket ma sembra che quanto stordito sia scritto non un problema di installazione

Pur vedendo questa altra risposta sono sorpreso che i file plist di esempio che ho visto funzionano (e il mio ultimo il commento è più pertinente)

    
risposta data 13.05.2016 - 18:00
fonte

Leggi altre domande sui tag