falhou ao iniciar o serviço

11

Eu criei um serviço 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

Eu coloquei na pasta / etc / systemd / system e chamei de mine.service.

Se eu executar sudo service mine start , isso me dá:

Failed to start mine.service.Unit mine.service not found

--- ATUALIZAÇÃO -----

Eu corro primeiro sudo systemctl daemon-reload e agora ele não me fornece nenhuma mensagem, mas o serviço ainda não inicia.

    
por George 04.07.2016 / 22:36

1 resposta

10

$HOME aponta para o diretório pessoal do usuário que está executando o script. Os serviços do Systemd são iniciados com o root, portanto, é provável que ele tente /root/theFolder/run.sh . Use caminhos absolutos em arquivos de serviço.

Você também tem a opção forking definida. Isso é necessário para programas que se baseiam, o seu script faz isso? A maioria não e se o seu não você deve remover esta opção ou o systemd estará aguardando o seu script terminar para reivindicá-lo como iniciado.

Também os arquivos de serviço do sistema que apontam para scripts em seu diretório inicial são desencorajados e, possivelmente, uma preocupação de segurança. Como eles são executados como root, qualquer um que possa modificá-los pode obter acesso root ao seu computador. É muito melhor copiar o script para /usr/local/bin e garantir que ele seja de propriedade e apenas gravável pelo root para parar isso. Também é uma boa ideia executar o script como um usuário sem privilégios usando as opções User= e Group= no arquivo de serviço.

Se você quiser executá-lo como seu usuário, é melhor colocar o arquivo de serviço em ~/.config/systemd/user/ e iniciá-lo / ativá-lo com systemd --user enable yourservice && systemd --user start yourservice (note, execute como seu usuário não raiz). Consulte este para obter mais informações sobre arquivos de serviço do usuário.

    
por 05.07.2016 / 00:41