2016-01-05 12 views
5

Ho creato un servizio systemd che dovrebbe richiamare uno script di shell, quando avviato o al riavvio.Perché il servizio di arresto del sistema viene eseguito immediatamente dopo l'avvio?

[Unit] 
Description=Starts the DCCA index software 

[Install] 
WantedBy=multi-user.target 

[Service] 
ExecStart=/opt/insiteone/bin/indexControl start 
ExecStop=/opt/insiteone/bin/indexControl stop 

# Execute pre and post scripts as root 
#PermissionsStartOnly=true 
Restart=on-abort 
TimeoutSec=600 

Inizialmente tenuti al riavvio in loop infinito, non appena viene avviato, ma quando ho aggiunto l'opzione TimeoutSec, è chiamato il ExecStop non appena il servizio è stato avviato per la prima volta (iniziato, e poi fermato di nuovo immediatamente).

Qualsiasi indizio, dove sto andando male? P.S: indexControl è uno script di shell che avvia altri processi.

+0

'chkconfig index off 'non è di aiuto (index.service è il file di servizio ssystemd) – kingsmasher1

+0

Ho ottenuto la risposta qui: http://superuser.com/questions/1022142/why-is-systemd-stopping -service-immediatamente-after-it-is-started che ha risolto il problema – kingsmasher1

risposta

3

Prova a cambiare Restart=on-abort-Restart=on-abnormal

Da http://www.freedesktop.org/software/systemd/man/systemd.service.html:

L'impostazione di questo per on-fallimento è la scelta consigliata per lunga durata servizi, al fine di aumentare l'affidabilità tentando automatica recupero da errori. Per i servizi che devono essere terminati su a scelta (ed evitare il riavvio immediato), on-anormale è una scelta alternativa.

Inoltre, è possibile aggiungere Type=oneshot alla sezione [Service].

Da https://wiki.archlinux.org/index.php/Systemd#Service_types:

Type = oneshot: questo è utile per gli script che fanno un singolo posto di lavoro e quindi uscita. È possibile impostare RemainAfterExit = yes in modo tale che systemd consideri ancora attivo il servizio dopo che il processo è stato chiuso.

È possibile incollare le mie modifiche raccomandate di seguito:

[Unit] 
Description=Starts the DCCA index software 

[Install] 
WantedBy=multi-user.target 

[Service] 
Type=oneshot 
ExecStart=/opt/insiteone/bin/indexControl start 
ExecStop=/opt/insiteone/bin/indexControl stop 
Restart=on-abnormal 

Un'altra cosa da considerare è se o non avete nemmeno bisogno la linea Restart= ... Fa lo script Ciò richiede di file di servizi non riescono spesso?

+5

Grazie per la risposta, ma 'type = oneshot' non funziona, ma' type = forking' fa. Ho ricevuto la risposta da qui, che funziona. http://superuser.com/questions/1022142/why-is-systemd-stopping-service-immediately-after-it-started/ – kingsmasher1

+0

Con RemainAfterExit = yes e Type = oneshot forse funziona – AkisC

+1

Impossibile impostare 'Restart = on -normale' su ** servizi oneshot **, solo 'Restart = no' è permesso: ' Il servizio ha Restart = impostazione diversa da no, che non è consentita per Type = servizi oneshot. Refusing.' – s1moner3d