Ho un programma eseguibile Java che posso eseguire digitando java -jar abc.jarnel 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.jarnel 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 scriptsezione anziché la execriga:
# 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.dcartella:
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-starte pre-stop/ post-stopcomandi da eseguire.
Inoltre, ho letto che vuoi verificare se un processo è in esecuzione. Controlla questa domanda e forse usa la pre-startsezione.
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 ;-)