Crea una sessione schermo con uno script bash usando contab


8

Voglio che un file .jar venga eseguito ogni volta che il server si avvia (stiamo usando un VPS), quindi ho modificato crontab usando crontab -ee poi aggiungendo @reboot bash /home/bash/startserver.sh. Ma non sono nemmeno arrivato al punto in cui la sceneggiatura funziona affatto.

Ecco la mia sceneggiatura:

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

Il motivo che devo usare screenè perché quando avvio bukkit.jar, entra in una console in cui posso inserire più comandi per quel programma (sono sicuro che tutti conoscete Minecraft e i suoi server su questo sito, sebbene , haha), ma devo essere in grado di eseguire altri comandi come root e per altri programmi mentre è in esecuzione, e persino chiudere la mia sessione PuTTY.

L'unico problema è che quando viene eseguito questo script, crea una sessione dello schermo, ma il suo ID non è elencato screen -ls, poiché l'ID è vuoto. Piuttosto, devo andare per /run/screen/S-roottrovare l'ID e quindi utilizzare il tipico screen -X -S $name quitsu di esso.

Forse questo non è nemmeno possibile, o forse c'è davvero un modo più semplice per farlo (mi piacerebbe più semplice), ma non riesco a capire perché questo non funziona. E se questo è possibile, è possibile ricongiungersi a una sessione screen -S bukkitquando si esegue uno script bash? (Molteplici domande, immagino, ma grazie mille per il vostro aiuto! (Parentesi))

Risposte:


15

Avvia la schermata in modalità staccata e esegui il tuo comando al suo interno:

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

Potresti voler creare uno script dedicato bukkit.sh:

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

In modo che se lo script diventa più complesso non è necessario scrivere una riga lunga per screen, e quindi il screencomando può rimanere lo stesso, semplicemente:

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

1
Ho provato a fare entrambe le opzioni, quella con un file più lungo e poi quella con due file separati, ma ora la sessione dello schermo non viene affatto creata. Ho provato a eseguire i comandi direttamente dalla riga di comando, ma non ha funzionato neanche ..: /
Jacob Larson

Ricevi un messaggio di errore o qualcosa del genere? Prima fai in modo che lo bukkit.shscript funzioni dalla riga di comando. Quindi, controlla che screen -S bukkit path/to/bukkit.shfunzioni. Quindi, controlla che screen -d -m -S bukkit path/to/bukkit.shfunzioni. Infine, imposta cron. Prova prima la cosa più semplice e fai piccoli passi per capire quale passo si interrompe. Dimmelo e il messaggio di errore che ricevi se hai bisogno di aiuto.
Jan

1

Si dovrebbe update-rc.dcome segue per attivare il servizio al boot:

# update-rc.d cron defaults

@JacobLarson Sei il benvenuto .. È meglio contrassegnare come risposta e votare se questo ti aiuta
Maythux
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.