J'ai un programme exécutable Java que je peux exécuter en tapant Java -jar abc.jar
dans le terminal. Comment puis-je l'exécuter en tant que service? Je veux l'exécuter en tant que service, par exemple en tapant service abc start
.
Assurez-vous que vous êtes sur 14.04. Ubuntu 16.04 (et supérieur) utilise systemd, pas Upstart.
Un script Upstart est un fichier de script placé à /etc/init/
et se terminant par .conf
.
Il nécessite 2 sections: une pour indiquer quand commencer et une autre avec la commande à exécuter.
Le script le plus simple pour commencer avec votre exemple est:
# myprogram.conf
start on filesystem
exec /usr/bin/Java -jar /path_to/program
Créé en tant que root sous /etc/init/myprogram.conf
.
Si votre script nécessite plusieurs lignes de commande, utilisez la section script
à la place de la ligne exec
:
# myprogram.conf
start on filesystem
script
/usr/bin/Java -jar /path_to/program
echo "Another command"
end script
Pour activer l'achèvement de bash pour votre service, ajoutez un lien symbolique dans le dossier /etc/init.d
:
Sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram
Ensuite, essayez de démarrer et d'arrêter:
Sudo service myprogram start
Selon le livre de recettes mis à jour , vous pouvez créer les commandes pre-start
/post-start
et pre-stop
/post-stop
.
De plus, je lis que vous voulez vérifier si un processus est en cours d'exécution. Vérifiez cette question et utilisez peut-être la section pre-start
.
Vous devez créer un parvenu. http://upstart.ubuntu.com/getting-started.html
Upstart est (IMHO) un désastre comparé aux bons vieux scripts SysV init. Upstart est beaucoup plus d'effort avec peu d'avantages pour le travail supplémentaire. Cela dit, je pense qu’il y aura quelques défenseurs rapides qui me prendront au dépourvu pour que ce soit évident ;-)