Come posso usare crontab per avviare una sessione schermo?


12

Voglio creare una voce crontab in modo che inizi lo schermo, avvii un server di giochi e si stacchi. Questo è nel caso in cui il server venga riavviato e voglio che lo avvii automaticamente.

0 0 0 0 0 (comando)

dovrebbe essere eseguito all'avvio.

Esegue un file shell situato in ~ / cube / server.sh


Sei un utente su questa macchina o hai accesso agli script init?
Corey S.


@Dennis: Sì, mi piace. Ma non possiamo presumere che il server di gioco che sta eseguendo non abbia una sorta di console a cui dovrebbe accedere (ovvero che gira sempre in primo piano). Altrimenti perché dovrebbe preoccuparsi dello schermo? A meno che, ovviamente, non sia a conoscenza di nohup e background.
Corey S.

Sono un utente su questa macchina.
Victor,

Risposte:


15

Qualcosa del genere dovrebbe funzionare. Questo esempio genera una schermata ed esegue "top":

screen -d -m top

Nel tuo crontab, come indicato, vorresti fare qualcosa del genere:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

Naturalmente, se il server di gioco richiede un set di ambienti "normale", puoi avvicinarti a:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)

1
cosa fa la . ~/.profileparte?
Victor,

Imposta forzatamente l'ambiente per la voce cron. Senza di essa, ottieni solo un paio di voci molto specifiche. (Vedi man crontab per i dettagli)
Corey S.

Ho un file .sh che esegue il server di gioco, quindi funzionerebbe? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Victor,

Questo è probabilmente il modo migliore per farlo. Se funziona, probabilmente non devi preoccuparti del profilo, ma se hai bisogno di un $ PATH completo, ecc., Potresti sempre ottenere il file .prof dallo script server.sh.
Corey S.

5

Questo dovrebbe essere sufficiente ... corri

$ crontab -e

Quindi inserire:

@reboot screen -dmS Victor

Potete per favore provare a spiegare in che modo questo comando "Victor" si riferisce all'esecuzione di uno script, ad esempio lo script richiesto dall'OP?
Patrick,

1
-S è solo per il nome della sessione
atx

4

Solo per completezza, è anche possibile usare tmux allo scopo invece di screen(vedere questo link per un confronto):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"

0

Ho avuto una situazione simile, ma a causa di altre restrizioni irragionevoli, non ho potuto usare crontab. In realtà avevo una schermata di chiamata inittab. (ha sostituito alcuni nomi per oscurare le informazioni):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

In "file.screenrc" è dove ho installato alcune opzioni:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

In questo modo è stato avviato all'avvio e, se il programma è morto o lo schermo è chiuso, viene generato nuovamente. Potrebbe non essere stato considerato convenzionale, ma ho dovuto lavorare un po 'su alcuni requisiti ambientali strani. Se avessimo bisogno di eliminarlo, però, avremmo dovuto commentare quella linea e uccidere la sessione. Quindi, quando sei pronto per ripristinarlo, decommentalo e inizializza q.

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.