Criei o seguinte serviço, amos.service, e ele precisa ser executado como amos (membro do grupo 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
todas as permissões foram definidas /usr/share/amos
paraamos:amos
o amos_service.sh é o seguinte:
#!/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 eu executo o serviço inicialmente sem nenhuma modificação nos diretórios, ou seja, pertencente ao root e amos.service, sem o parâmetro User not Group, tudo funciona muito bem!
Depois de alterar as permissões dos diretórios para amos: amos e adicionar o usuário e grupo amos.service, o serviço não funcionará e recebo o seguinte: Veja a imagem em anexo
/var/log
pertence à raiz. Eu acho que você deseja usar um diretório/var/log/amos/
que você cria como de propriedade de amos.Respostas:
Use systemd:
Para mostrar o problema, use
journalctl -xe
depois de iniciar o serviço.Você não precisa de um script bash, coloque isso no seu arquivo de serviço:
Não há necessidade
ExecStop
, o systemd interromperá todos os processos filhos. Você pode ver a saída comjournalctl -u amos.service
.fonte
Eu acho que você quer garfos em vez de simples. Simples pressupõe que seu processo não é encerrado; portanto, quando ocorre, o processo é encerrado.
Você provavelmente deseja remover o script amos_service.sh e colocá-lo em funcionalidade no amos.service.
fonte