Créer une session Screen avec un script bash à l'aide de contab

8

Je veux qu'un fichier .jar s'exécute à chaque démarrage du serveur (nous utilisons un VPS), et j'ai donc édité crontab en utilisant crontab -epuis 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 je dois l'utiliser screenest que lorsque je démarre bukkit.jar, il va dans une console où je peux entrer plus de commandes pour ce programme (je suis sûr que vous connaissez tous Minecraft et ses serveurs sur ce site, cependant , haha), mais je dois pouvoir exécuter d'autres commandes en tant que root et pour d'autres programmes pendant son 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 n'est pas répertorié screen -ls, car l'ID est vide. Au lieu de cela, je dois aller /run/screen/S-rootchercher l'ID et ensuite utiliser le typique screen -X -S $name quitdessus.

Peut-être que ce n'est même pas possible, ou peut-être qu'il existe en fait un moyen plus simple de le faire (j'adorerais plus simple), mais je ne peux pas comprendre pourquoi cela ne fonctionne pas. Et si cela est possible, est-il possible de rejoindre une session avec screen -S bukkitlors de l'exécution d'un script bash? (Plusieurs questions, je suppose, mais merci beaucoup pour votre aide! (Parenthèses))

Jacob Larson
la source

Réponses:

15

Écran de démarrage en mode détaché, et faites-lui exécuter votre commande à l'intérieur:

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

Pour que si le script devient plus complexe, vous n'avez pas besoin d'écrire une longue ligne pour screenque la screencommande reste la même, simplement:

screen -d -m -S bukkit path/to/bukkit.sh
janos
la source
1
J'ai essayé de faire les deux options, celle avec un fichier plus long, puis celle avec deux fichiers distincts, mais maintenant la session d'écran n'est pas du tout créée. J'ai essayé d'exécuter les commandes directement depuis la ligne de commande, mais cela n'a pas fonctionné non plus ..: /
Jacob Larson
Recevez-vous un message d'erreur ou quelque chose? Commencez par faire fonctionner le bukkit.shscript sur la ligne de commande. Ensuite, vérifiez que cela screen -S bukkit path/to/bukkit.shfonctionne. Ensuite, vérifiez que cela screen -d -m -S bukkit path/to/bukkit.shfonctionne. Enfin, configurez cron. Essayez d'abord la chose la plus simple et faites de petites étapes pour comprendre quelle étape se casse. Dites-le-moi et le message d'erreur que vous obtenez si vous avez besoin d'aide.
janos
1

Vous devez update-rc.dcomme suit pour activer le service au démarrage:

# update-rc.d cron defaults
Maythux
la source
@JacobLarson Vous êtes les bienvenus .. Il vaut mieux marquer comme réponse et voter positivement si cela vous aide
Maythux