Em um aplicativo de inicialização Spring, ele procura uma resources
pasta local para carregar as configurações. Portanto, seu script de shell de inicialização precisa ser executado nesta pasta:
x.jar
resources
|- application.yml
|- more.yml
startup.sh
Estou escrevendo app.service
e estou preso aqui:
[Unit]
Description=service for app
After=syslog.target network.target
[Service]
Type=forking
ExecStart=cd /data/flume; ./control.sh start
ExecReload=cd /data/flume; ./control.sh restart
ExecStop=cd /data/flume; ./control.sh stop
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
O caminho executável não é absoluto, ignorando: cd /data/flume; /bin/bash startup.sh
É possível ter um Chdir
no systemd? Ou existe uma maneira decente de conseguir isso?
A opção é
[Service]
WorkingDirectory=
.Mas você terá que especificar o caminho completo para o script de qualquer maneira – as linhas ExecStart não são um shell; eles têm suas próprias regras que são diferentes dos comandos do shell.
(Mesmo em shells reais, você não precisa estar dentro de um diretório para executar scripts a partir dele – você sempre pode substituir pelo
./
caminho completo do script.)Finalmente, seria muito preferível iniciar o serviço diretamente, sem o uso de scripts wrapper "control.sh" ou "startup.sh". Se eles definirem variáveis de ambiente, você também poderá defini-las no .service.