web-dev-qa-db-fra.com

Créer une session Screen avec un script bash en utilisant crontab

Je souhaite qu'un fichier .jar s'exécute à chaque démarrage du serveur (nous utilisons un VPS). J'ai donc modifié crontab à l'aide de crontab -e, puis en ajoutant @reboot bash /home/bash/startserver.sh. Mais je ne suis même pas arrivé au point où le script fonctionne du tout.

Voici mon script:

#!/bin/bash
screen -S bukkit
cd $HOME/server
Java -jar bukkit.jar

La raison pour laquelle j'ai besoin d'utiliser screen est que, lorsque je lance bukkit.jar, il se connecte à une console où je peux entrer davantage de commandes pour ce programme (je suis sûr que vous connaissez tous Minecraft et ses serveurs sur ce site, haha), mais je dois pouvoir faire d’autres commandes en tant que root et pour d’autres programmes en cours d’exécution, et même fermer ma session PuTTY.

Le seul problème est que lorsque ce script est exécuté, il crée une session d'écran, mais son ID non est répertorié dans screen -ls, car cet identifiant est vide. Plutôt, je dois aller à /run/screen/S-root pour trouver l'ID, puis utiliser le screen -X -S $name quit typique dessus.

Ce n'est peut-être même pas possible, ou peut-être existe-t-il un moyen plus simple de le faire (j'aimerais beaucoup plus simple), mais je ne comprends pas pourquoi cela ne fonctionne pas. Et si cela est possible, est-il possible de rejoindre une session avec screen -S bukkit lors de l'exécution d'un script bash? (Plusieurs questions, je suppose, mais merci beaucoup pour votre aide! (Parenthèses))

8
Jacob Larson

Démarrer l'écran en mode détaché et lui faire exécuter votre commande:

screen -d -m -S bukkit bash -c 'cd $HOME/server && Java -jar bukkit.jar'

Vous voudrez peut-être créer un script dédié bukkit.sh:

#!/bin/bash -e
cd ~/server
Java -jar bukkit.jar

Ainsi, si le script devient plus complexe, vous n'avez pas besoin d'écrire une longue ligne pour screen et la commande screen peut rester la même, simplement:

screen -d -m -S bukkit path/to/bukkit.sh
14
janos

Vous devriez update-rc.d comme suit pour activer le service au démarrage:

# update-rc.d cron defaults
1
Maythux