Esecuzione di un servizio systemd come utente diverso da root!


18

Ho creato il seguente servizio, amos.service, e deve essere eseguito come amos (membro del gruppo amos)

[Unit]
Description=AMOS Service
After=network.target

[Service]
User=amos
Group=amos
Type=simple
WorkingDirectory=/usr/share/amos
ExecStart=/usr/share/amos/amos_service.sh start
ExecStop=/usr/share/amos/amos_service.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

tutti i permessi sono stati impostati /usr/share/amosperamos:amos

amos_service.sh è il seguente:

#!/bin/bash

CUDIR=$(dirname "$0")
cd /usr/share/amos

start() {
  exec /usr/share/amos/run_amos.sh >> /var/log/amos.log 2>&1  
}

stop() {
  exec pkill java 
}

case $1 in
  start|stop) "$1" ;;
esac

cd "$CURDIR"

Quando eseguo inizialmente il servizio senza alcuna modifica alle directory, ovvero all'appartenenza a root e ad amos.service non avendo il parametro User not Group, tutto funziona alla grande!

Dopo aver modificato le autorizzazioni delle directory in amos: amos e aggiunto l'utente e il gruppo amos.service, il servizio non funzionerà e visualizzerò quanto segue: Vedi l'immagine allegata

Errore dopo aver tentato di eseguire il servizio


Qual è la differenza, se presente, tra i casi di successo e fallimento in termini di messaggi registrati su /var/log/amos.log?
sourcejedi,

Inoltre, questa configurazione è strana in quanto /var/logè di proprietà di root. Penso che tu voglia usare una directory /var/log/amos/che crei come di proprietà di Amos.
sourcejedi,

Risposte:


11

Usa systemd:

Per mostrare il problema, utilizzare journalctl -xedopo aver avviato il servizio.

Non hai bisogno di uno script bash, inseriscilo nel tuo file di servizio:

ExecStart=/usr/share/amos/run_amos.sh

Non è necessario ExecStop, systemd interromperà tutti i processi figlio. È possibile visualizzare l'output con journalctl -u amos.service.


4
Dovrebbe esserci un "=" dopo ExecStart. Non riesco a risolverlo perché la modifica dovrebbe contenere meno di 6 caratteri.
Mark Stosberg,

5

Penso che tu voglia biforcarti invece che semplice. Semplice presuppone che il processo non esca, quindi quando lo fa, lo chiama morto.

Probabilmente vuoi rimuovere lo script amos_service.sh e metterne la funzionalità in amos.service.


Apporterà le modifiche come suggerito ... stava leggendo a riguardo e ho visto il tuo commento. Registrerà i risultati.
itprguy,
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.