Avviare e arrestare un'unità systemd con un'altra

Ho due servizi A.service e B.service. Voglio che B sia fermato quando A si esce / si uccide / si arresta. Inoltre, voglio che B venga riavviato quando A viene riavviato. Ho provato la risposta data in Come avviare e arrestare un'unità systemd con un'altra? e impostare i miei file come segue:

Un servizio

[Unit] Description=A Before=B.service Requires=B.service [Service] ExecStart=/usr/share/A ExecStopPost=/usr/evo/exit_handler.sh %p Restart=always StartLimitBurst=3 StartLimitInterval=300 

B.Service

 [Unit] Description=B BindsTo=A.service [Service] Type=forking ExecStart=/usr/share/B start ExecStop=/usr/share/B stop StartLimitBurst=5 StartLimitInterval=10 Restart=always 

Quando uccido A o faccio un riavviamento systemctl A, vedo che B viene riavviato. Ma quando A esce con lo stato 0, non riesco a riavviare B. Ho abilitato loggin di debug di sistema e vedo che lo stato di A cambia a morte, ma non per riavviare automaticamente

One Solution collect form web for “Avviare e arrestare un'unità systemd con un'altra”

L'unità B utilizza BindsTo= , che serve a monitorare lo stato di un'unità che potrebbe scomparire .

Quello che vuoi invece di questo è PartOf= , where questo servizio esegue esattamente lo stato del servizio denominato. Dalla documentazione :

PartOf=
Configura le dependencies simili a Requires= , ma è limitata alla fermata e al riavvio di unità. Quando systemd arresta o riavvia le unità elencate qui, l'azione viene propagata a questa unità. Si noti che questa è una dipendenza a senso unico – le modifiche a questa unità non influenzano le unità elencate.

Non credo che questo risolverà tutti i tuoi problemi, però. Sospetto che non abbia considerato abbastanza con attenzione le effettive dependencies tra i due servizi e dovrai fare un po 'più di pensare (e poter esprimere se stessi) prima di poter fare queste unità a fare ciò che hanno bisogno di fare.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.