[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: