web-dev-qa-db-fra.com

Comment faire en sorte qu'un fichier jar s'exécute au démarrage et quand vous vous déconnectez?

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 :

  • J'ai écrit un robot qui ne s'arrête jamais et qui rampe sur RSS sur Internet.
  • Le robot a été écrit en Java - c'est donc un fichier jar pour le moment.
  • Je suis administrateur sur une machine équipée d'Ubuntu 11.04.
  • Il est possible que la machine tombe en panne. J'aimerais donc que le robot se lance à chaque démarrage de la machine.
  • De plus, j'aimerais qu'il continue à fonctionner même lorsque je me suis déconnecté. Je ne suis pas sûr que ce soit possible, mais la plupart du temps, je suis déconnecté et je veux toujours l'explorer.

Des idées? Quelqu'un peut me diriger dans la bonne direction?

Je cherche juste la solution la plus simple.

28
RanZilber

Voici un moyen facile de faire cela en utilisant SysVInit. Instructions:

  1. Créez les scripts de démarrage et d'arrêt de votre application. Mettez-le sur un répertoire, dans notre exemple est:

    • Lancer le script: /usr/local/bin/myapp-start.sh
    • Stop Script: /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
    
  2. 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
    
  3. 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.

31
Marcos Roriz Junior

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:

  • Upstart init démon et utilitaire initctl
  • upstart-logd fournit le démon logd et le fichier de définition de travail pour le service logd
  • upstart-compat-sysv fournit des fichiers de définition de travail pour les tâches rc et les outils de redémarrage, de niveau d'exécution, d'arrêt et de telinit assurant la compatibilité avec SysVinit.
  • startup-tasks fournit des fichiers de définition de travail pour les tâches de démarrage du système
  • system-services fournit des fichiers de définition de travail pour les services tty

L'apprentissage est très agréable et en vaut la peine. Upstart a un site Web: http://upstart.ubuntu.com/

6
user8290

3 suggestions rapides ...

  1. 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.

  2. Un processus exécuté par crond devrait persister entre les déconnexions. Peut-être l'ajouter à votre crontab.

  3. 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.

2
tarmarc

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

https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps

0
Alan Thompson

Scripts de démarrage simples avec Java vérification de version pour Linux auth-agent et Windows auth-agent.bat

0
Yuriy Tumakha

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 shet de l’exécuter dans la fonction de démarrage.

0
Şήøωў