Ho un programma eseguibile Java che posso eseguire digitando java -jar abc.jar
nel terminale. Come posso eseguirlo come servizio? Voglio eseguirlo come un servizio digitando service abc start
.
Ho un programma eseguibile Java che posso eseguire digitando java -jar abc.jar
nel terminale. Come posso eseguirlo come servizio? Voglio eseguirlo come un servizio digitando service abc start
.
Risposte:
Assicurati di essere su 14.04. Ubuntu 16.04 (e versioni successive) utilizza systemd, non Upstart.
Uno script Upstart è un file di script posizionato in /etc/init/
e che termina in .conf
.
Richiede 2 sezioni: una per indicare quando iniziare e un'altra con il comando da eseguire.
Lo script più semplice per iniziare con l'esempio è:
# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program
Creato come root sotto /etc/init/myprogram.conf
.
Se il tuo script richiede più di una riga di comando, utilizza la script
sezione anziché la exec
riga:
# myprogram.conf
start on filesystem
script
/usr/bin/java -jar /path_to/program
echo "Another command"
end script
Per abilitare il completamento bash per il tuo servizio, aggiungi un link simbolico nella /etc/init.d
cartella:
sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram
Quindi prova a iniziare e fermalo:
sudo service myprogram start
Secondo il ricettario di avvio , è possibile creare pre-start
/ post-start
e pre-stop
/ post-stop
comandi da eseguire.
Inoltre, ho letto che vuoi verificare se un processo è in esecuzione. Controlla questa domanda e forse usa la pre-start
sezione.
sudo chmod +x /etc/init.d/myprogram
. ATTENZIONE: il tuo metodo di risposta non funziona in Ubuntu 16.04!
Devi creare un upstart. http://upstart.ubuntu.com/getting-started.html
Upstart è (IMHO) un disastro rispetto ai buoni script di init SysV. Upstart è MOLTO più sforzo con un piccolo vantaggio per il lavoro aggiunto. Detto questo, ho il sospetto che ci saranno alcuni difensori in partenza che mi porteranno al compito per me affermando l'ovvio ;-)