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))
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
Vous devriez update-rc.d
comme suit pour activer le service au démarrage:
# update-rc.d cron defaults