Je ne sais pas par où commencer. J'ai lu sur les démons et je n'ai pas compris le concept.
Plus de détails :
Des idées? Quelqu'un peut me diriger dans la bonne direction?
Je cherche juste la solution la plus simple.
Voici un moyen facile de faire cela en utilisant SysVInit. Instructions:
Créez les scripts de démarrage et d'arrêt de votre application. Mettez-le sur un répertoire, dans notre exemple est:
/usr/local/bin/myapp-start.sh
/usr/local/bin/myapp-stop.sh
Chacun fournira les instructions pour exécuter/arrêter l'application. Par exemple, le contenu de myapp-start.sh
peut être aussi simple que ce qui suit:
#!/bin/bash
Java -jar myapp.jar
Pour le script stop, cela peut ressembler à ceci:
#!/bin/bash
# Grabs and kill a process from the pidlist that has the Word myapp
pid=`ps aux | grep myapp | awk '{print $2}'`
kill -9 $pid
Créez le script suivant (myscript
) et mettez-le sur /etc/init.d
.
/etc/init.d/myscript
content:
#!/bin/bash
# MyApp
#
# description: bla bla
case $1 in
start)
/bin/bash /usr/local/bin/myapp-start.sh
;;
stop)
/bin/bash /usr/local/bin/myapp-stop.sh
;;
restart)
/bin/bash /usr/local/bin/myapp-stop.sh
/bin/bash /usr/local/bin/myapp-start.sh
;;
esac
exit 0
Mettez le script pour commencer avec le système (en utilisant SysV). Il suffit d’exécuter la commande suivante (en tant que root):
update-rc.d myscript defaults
PS: Je sais que Upstart est génial et bla bla, mais je préfère le vieux système SysV init.
Oui! C'est possible. :) La méthode Upstart vous permet de vous assurer que le service continue à fonctionner. Il contient cinq packages, tous installés par défaut:
L'apprentissage est très agréable et en vaut la peine. Upstart a un site Web: http://upstart.ubuntu.com/
3 suggestions rapides ...
Créez un script de tarte S dans /etc/rc3.d
(mode de console multi-utilisateur) avec le correspondant K scripts illisibles dans /etc/rc.0
et /etc/rc6.d
pour tuer votre programme Java de manière contrôlée lorsque le système est mis hors tension (niveau d'exécution 0) ou redémarré (niveau d'exécution 6). Voir Introduction aux niveaux d'exécution). .
Vous pourrez peut-être démarrer votre application Java au niveau d'exécution 2 (rc2.d), mais en tant que robot d'exploration, elle aura besoin de TCP/IP. Assurez-vous donc que votre service de réseau est disponible/démarré au préalable dans votre niveau d'exécution 2. La mise en réseau est définitivement au niveau 3.
/etc/init.d
contient tous les scripts de démarrage/arrêt effectifs. Les répertoires /etc/rcN.d
ne contiennent que des liens vers eux, préfixés par S ou K pour les démarrer ou les tuer respectivement, par niveau d'exécution N.
Un processus exécuté par crond
devrait persister entre les déconnexions. Peut-être l'ajouter à votre crontab.
Un processus exécuté avec Nohup
devrait également persister. Voir Nohup: lancez une commande même après vous être déconnecté .
$ Nohup Java -jar myapp.jar &
Par défaut, la sortie standard de myapp.jar
ira dans un fichier nommé ./Nohup.out
ou $HOME/Nohup.out
si le précédent n'est pas accessible en écriture.
Le moyen le plus simple consiste à utiliser supervisord
. S'il vous plaît voir tous les détails à http://supervisord.org/
Vous pouvez également voir plus de détails ici:
Exécution d’un fichier jar exécutable au démarrage du système
Scripts de démarrage simples avec Java vérification de version pour Linux auth-agent et Windows auth-agent.bat
Soyez également conscient lorsque vous effectuez des applications avec:
update-rc.d myscript defaults
Pour avoir les permissions 0755 et utiliser ou obtenir avant votre .sh le chemin. Supposons que votre script se trouve sur /root/test.sh. Vous devez d’abord passer au CD /root/
avant d’accéder à test.sh
.
Le meilleur moyen est donc de créer un SH sur init.d, puis de modifier le chemin vers votre sh
et de l’exécuter dans la fonction de démarrage.