[Linuxtrent] Re: systemd - Too many concurrent connections, refusing
- From: Antonio Galea <antonio.galea@xxxxxxxxx>
- To: linuxtrent <linuxtrent@xxxxxxxxxxxxx>
- Date: Sun, 13 Aug 2017 17:08:23 +0200
2017-08-13 7:04 GMT+02:00 Guido Brugnara <gdo@xxxxxxxxx>:
Lo script di norma si attiva e lo rimane per molto tempo, ma se viene a
mancare una risorsa esterna (mancanza di rete,
errore o service remoto fermo) lo script si ferma e va quindi riavviato. Al
riavvio se la risorsa non è ancora raggiungibile,
dopo un determinato timeout lo script si interrompe ecc. ecc.
Ok, descritta così la questione mi è decisamente più chiara - e
l'esigenza la comprendo meglio.
Prima di aggiornare il server all'attuale versione 16.4 lo script, che girava
su un Ubuntu 12.04, veniva riavviato da
"upstart" senza alcun problema.
Ovvio che tutto è migliorabile a questo mondo, sia lo script io oggetto che
systemd; solo che systemd, direi, è un
componente assai più critico ma purtroppo è stato adottato un po' troppo in
fretta, prima che abbia raggiunto una stabilità
sufficiente al ruolo che gli compete.
Un suo bug, come quello che ho descritto, blocca di fatto tutto il sistema.
A dire il vero, io non credo che systemd in questa situazione abbia un
bug: è solo che non puoi aspettarti che sia troppo simile ad upstart,
perché segue una filosofia abbastanza diversa.
Il comportamento che descrivi sembra dovuto al fatto che systemd è
decisamente più veloce di upstart, e questo fa sì che il tuo servizio,
quando la risorsa effettivamente non è disponibile, venga riavviato
con una frequenza troppo alta. Systemd fa correttamente il suo lavoro,
uccidendo il demone impazzito (dal suo punto di vista) prima che tiri
giù la macchina.
Una soluzione pulita sarebbe dichiarare in modo esplicito nel tuo unit
file di quale risorsa hai bisogno, usando BindsTo+After (o una delle
altre opzioni: "man systemd.unit"). Se non si tratta di una risorsa
direttamente monitorabile da systemd, puoi sempre creare un
mini-servizio che faccia solo il monitoraggio - e legarlo al tuo
script attuale allo stesso modo.
HTH,
Antonio
--
Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO
"subscribe" (o "unsubscribe") a
mailto:linuxtrent-request@xxxxxxxxxxxxx
Other related posts: