Wie starte ich mit crontab eine Bildschirmsitzung?

12

Ich möchte einen Crontab-Eintrag erstellen, damit er den Bildschirm startet, einen Spieleserver startet und sich löst. Dies ist für den Fall gedacht, dass der Server neu gestartet wird und ich möchte, dass er dies automatisch für mich startet.

0 0 0 0 0 (Befehl)

sollte beim Start ausgeführt werden.

Es wird eine Shell-Datei ausgeführt, die sich unter ~ / cube / server.sh befindet

Sieger
quelle
Sind Sie ein Benutzer auf diesem Computer oder haben Sie Zugriff auf Init-Skripte?
Corey S.
2
Siehe Prozessmanagement .
Bis auf weiteres angehalten.
@ Tennis: Ja, das gefällt mir. Wir können jedoch nicht davon ausgehen, dass der von ihm ausgeführte Spieleserver keine Konsole hat, auf die er zugreifen muss (dh immer im Vordergrund ausgeführt wird). Sonst warum sollte er sich mit dem Bildschirm beschäftigen? Es sei denn natürlich, er ist sich von Nohup und Hintergrund nicht bewusst.
Corey S.
Ich bin ein Benutzer auf diesem Computer.
Victor

Antworten:

15

So etwas sollte funktionieren. Dieses Beispiel erzeugt einen Bildschirm und führt "top" aus:

screen -d -m top

Wie angegeben, möchten Sie in Ihrem Crontab Folgendes tun:

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

Wenn der Spieleserver eine "normale" Umgebung benötigt, können Sie natürlich näher heranrücken, indem Sie:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)
Corey S.
quelle
1
Was macht der . ~/.profileTeil?
Victor
Dadurch wird die Umgebung für den Cron-Eintrag zwangsweise festgelegt. Ohne sie erhalten Sie nur ein paar sehr spezifische Einträge. (Siehe Mann Crontab für Details)
Corey S.
Ich habe eine .sh-Datei, die den Spieleserver ausführt. Würde dies also funktionieren? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Victor
Das ist wahrscheinlich der beste Weg, dies zu tun. Wenn dies funktioniert, müssen Sie sich wahrscheinlich keine Gedanken über das Profil machen. Wenn Sie jedoch einen vollständigen $ PATH usw. benötigen, können Sie das .profile jederzeit aus dem Skript server.sh beziehen.
Corey S.
5

Dies sollte ausreichen ... ausführen

$ crontab -e

Dann geben Sie ein:

@reboot screen -dmS Victor
atx
quelle
Können Sie bitte versuchen zu erklären, wie sich dieser 'Victor'-Befehl auf das Ausführen eines Skripts bezieht - z. B. das Skript, nach dem das OP gefragt hat?
Patrick
1
-S ist nur für den Sitzungsnamen
atx
4

Der Vollständigkeit halber ist es auch möglich, tmux zu diesem Zweck zu verwenden screen(siehe diesen Link für einen Vergleich):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"
Petr Pudlák
quelle
0

Ich hatte eine ähnliche Situation, aber aufgrund anderer unangemessener Einschränkungen konnte ich Crontab nicht verwenden. Ich hatte tatsächlich einen Inittab-Anrufbildschirm. (ersetzte einige Namen, um Informationen zu verschleiern):

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

In 'file.screenrc' habe ich einige Optionen eingerichtet:

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

Auf diese Weise wurde es beim Booten gestartet, und wenn das Programm starb oder der Bildschirm geschlossen wurde, wurde es erneut erzeugt. Es wurde vielleicht nicht als konventionell angesehen, aber ich musste ein paar seltsame Umgebungsanforderungen erfüllen. Wenn wir es jedoch entfernen müssten, müssten wir diese Zeile kommentieren und die Sitzung beenden. Wenn Sie bereit sind, es wieder aufzurufen, kommentieren Sie es aus und starten Sie q.

Mangloid
quelle