Executando um serviço systemd como um usuário diferente de root!

10

Eu 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 em /usr/share/amos to amos: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 executo o serviço inicialmente sem quaisquer modificações nos diretórios, ou seja, pertencendo ao root, e o amos.service não tem o parâmetro User not Group, tudo corre muito bem!

Depois de alterar as permissões dos diretórios para amos: amos e adicionar o amos.service User & Grupo, o serive não funcionará e eu recebo o seguinte: Veja a imagem anexada

    
por itprguy 04.05.2017 / 20:14

2 respostas

7

Use o 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:

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

Não há necessidade de ExecStop , o systemd irá parar todos os processos filhos. Você pode ver a saída com journalctl -u amos.service .

    
por 04.05.2017 / 21:36
4

Eu acho que você quer forking em vez de simples. Simples assume que o seu processo não sai, então quando isso acontece, ele invoca o processo.

Você provavelmente deseja remover o script amos_service.sh e colocar sua funcionalidade no amos.service.

    
por 04.05.2017 / 21:40