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
Coloquei-o na pasta / etc / systemd / system e o nomeei como meu.service.
Se eu correr, sudo service mine start
isso me dá:
Falha ao iniciar mine.service.Unit mine.service não encontrado
--- ATUALIZAÇÃO -----
Eu corro primeiro sudo systemctl daemon-reload
e agora ele não me envia nenhuma mensagem, mas o serviço ainda não é iniciado.
systemctl daemon-reload
após criar seu arquivo de unidade?Respostas:
$HOME
aponta para o diretório inicial do usuário que está executando o script. Os serviços Systemd são iniciados com o root, provavelmente tentando/root/theFolder/run.sh
. Use caminhos absolutos nos arquivos de serviço.Você também tem a
forking
opção definida. Isso é necessário para um programa que se destaca, o seu script faz isso? A maioria não, e se o seu não, você deve remover essa opção ou o systemd estará aguardando o término do script para reivindicá-lo como iniciado.Também os arquivos de serviço do sistema que apontam para scripts no diretório inicial são desencorajados e, possivelmente, uma preocupação de segurança. Como eles são executados como root, qualquer pessoa que possa modificá-los pode obter acesso root ao seu computador. É muito melhor copiar o script
/usr/local/bin
e garantir que ele seja de propriedade e somente gravável pela raiz para interromper isso. Também é uma boa ideia executar o script como um usuário sem privilégios usando as opçõesUser=
eGroup=
no arquivo de serviço.Se você deseja executá-lo como seu usuário, é melhor colocar o arquivo de serviço
~/.config/systemd/user/
e iniciá-lo / ativá-losystemctl --user enable yourservice && systemctl --user start yourservice
(observe, execute como seu usuário não root). Veja isso para obter mais informações sobre arquivos de serviço do usuário.fonte
HOME=$HOME
no primeiro arquivo de ambiente. Mas o serviço não pôde ser iniciado, sem erros.