impossibile avviare il servizio


15

Ho creato un servizio systemd:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

L'ho messo nella cartella / etc / systemd / system e l'ho chiamato mine.service.

Se corro sudo service mine startmi dà:

Impossibile avviare mine.service.Unit mine.service non trovato

--- AGGIORNARE -----

Corro prima sudo systemctl daemon-reloade ora non mi dà alcun messaggio ma il servizio non si avvia ancora.


10
Hai eseguito systemctl daemon-reloaddopo aver creato il file di unità?
Wieland,

@Wieland: Hmm..Ora non mi mostra alcun messaggio, ma non si avvia ancora.
George

@don_crissti: lo stato indica che è attivo, ma lo script (in ExecStart) non viene eseguito.
George

come sarebbe conoscere la corretta $ HOME? Cosa ti aspetti che sia per un servizio di sistema?
Serge,

@Serge: Hmm..Così, come posso usare $ HOME?
George

Risposte:


14

$HOMEpunta alla home directory dell'utente che esegue lo script. I servizi di Systemd vengono avviati con root, quindi probabilmente ci proverà /root/theFolder/run.sh. Usa percorsi assoluti nei file di servizio.

Hai anche l' forkingopzione impostata. Questo è necessario per il programma che si fa da sfondo, lo fa la tua sceneggiatura? La maggior parte no e in caso contrario la tua non dovrebbe essere rimossa o systemd attenderà che il tuo script finisca per reclamarlo come avviato.

Anche i file di servizio di sistema che puntano a script nella home directory sono sconsigliati e probabilmente un problema di sicurezza. Poiché vengono eseguiti come root, chiunque sia in grado di modificarli può potenzialmente ottenere l'accesso root al computer. È molto meglio copiare lo script /usr/local/bine assicurarsi che sia posseduto e scrivibile solo da root per fermarlo. È inoltre consigliabile eseguire lo script come utente non privilegiato utilizzando le opzioni User=e Group=nel file di servizio.

Se si desidera eseguirlo come utente, è meglio inserire il file di servizio ~/.config/systemd/user/e avviarlo / abilitarlo con systemctl --user enable yourservice && systemctl --user start yourservice(notare, eseguire come utente non root). Vedi questo per maggiori informazioni sui file del servizio utente.


: Metto lo script in / usr / local / bin e il servizio in /.config/systemd/user. Se provo ad abilitare il servizio, mi mostra "argomenti in eccesso". Se provo ad usare systemctl mostra 'fallito .. unit .. ', qualcosa del genere.
George,

Puoi fornire i comandi completi che hai provato e registri più dettagliati. È difficile eseguire il debug con frammenti.
Michael Daffin,

: Esiste una soluzione per usare il percorso $ HOME? Perché, se inserisco lo script in / usr / local / bin, usa i percorsi relativi a $ HOME . Ho visto questo . E ho provato a inserire HOME=$HOMEil primo file di ambiente. Ma il servizio non è stato avviato, nessun errore.
George,

1
su Ubuntu ho dovuto usare systemctl per questo non systemd, usando systemd ho ricevuto un errore "Argomenti in eccesso"
Alexander Mills

1
@AlexanderMills Hai ragione, il comando corretto in systemctl e systemd era solo un refuso nella risposta.
Michael Daffin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.