Skript im Bildschirm mit Cron starten

Skript im Bildschirm mit Cron starten

Ich entschuldige mich, wenn dies schon einmal gefragt wurde, aber ich bin nicht sicher, wie ich eine Suchanfrage dazu stellen soll. Ich bin ein absoluter Neuling bei Linux und habe gelernt, Probleme nach und nach zu lösen.

Ich versuche, funktionierende Cron-Jobs einzurichten, um einen von mir betriebenen Spieleserver neu zu starten.

Derzeit sieht meine Crontab so aus

#backup world as instructed by https://github.com/g1franc/SEDS-Setup
0 0 * * * /home/root/spaceengineers/start.sh backupworld
#close server
1 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^C"
#close screen
2 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^M"
#recreate server
3 0 * * * /home/root/spaceengineers/start.sh

Jetzt auf der Backup-Welt bekomme ich in meiner Syslog-Datei befindet sich /var/logich

May 24 00:00:01 SpaceEngineers CRON[1958]: (root) CMD (/home/root/spaceengineers/start.sh backupworld)
May 24 00:00:01 SpaceEngineers CRON[1957]: (CRON) info (No MTA installed, discarding output)

und das ist auch das gleiche mit dem Recreate-Server

May 24 00:03:01 SpaceEngineers CRON[2269]: (root) CMD (/home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers)
May 24 00:03:01 SpaceEngineers CRON[2268]: (CRON) info (No MTA installed, discarding output)

Die anderen Befehle funktionieren einwandfrei.

bevor jetzt jemand fragt, warum ich meinen Code so strukturiert habe, wie ich es getan habe, liegt es daran, dass das Tutorial, dem ich gefolgt bin, sagt, dass ich den Server über starten soll, ~/spaceengineers/start.sh -x spaceengineers und von dem, was ich gelesen habe, muss ich /usr/bin/screen ausführen, um auf alle Bildschirmbefehle in Cron zuzugreifen

Was mache ich falsch und was muss ich tun, um meine Probleme zu beheben?

BEARBEITET:Habe die Crontab so geändert, dass sie mit den aktuellen Inhalten auf meinem Server übereinstimmt, die Probleme bleiben die gleichen

Pastebin von start.sh

http://pastebin.com/9QcWyqYF

Antwort1

Können Sie die GNU-Bildschirmsyntax für diese Zeile überprüfen:

3 0 * * * /home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers

Ich hätte so etwas erwartet wie:

3 0 * * * /usr/bin/screen -S spaceengineers -X stuff 'command with newline' 

-XDie Verwendung des Mittels erfordert allerdings screendie Ausführung von Bildschirmbefehlen und nicht die Ausführung eines Skripts.

Daher müssen Sie den screen stuffBefehl wie folgt verwendenSU-Frage

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

Aktualisieren

Versuchen Sie es mit /bin/bashoder wo auch immer sich die von Ihnen verwendete Shell befindet.

 3 0 * * * /bin/bash /home/root/spaceengineers/start.sh

Fügen Sie möglicherweise Inhalte hinzu, start.shum die Fehlerbehebung zu unterstützen.

Sie können die Shell mit dem whichBefehl finden. Möglicherweise müssen Sie sudoroot sein, um das herauszufinden.

Antwort2

Dieser Befehl hat bei mir funktioniert. Da jedoch einer oder mehrere Befehle in meinem Skript sudo erforderten, musste ich dies unter dem Cron des Root-Benutzers einrichten:

17 2 29 1 * /usr/bin/screen -dmS $MYSESSIONNAME /bin/bash $FULLPATHTOMYSHELLSCRIPT $SHELLSCRIPTARG1 $SHELLSCRIPTARG2 ...

Der Schlüssel dazu, dass der Bildschirm funktioniert (und nicht einfach sofort geschlossen wird, wenn er von Cron aufgerufen wird), ist das -dArgument, aber das mhilft wahrscheinlich in gewisser Weise/in manchen Fällen auch.

Unten sehen Sie den entsprechenden Ausschnitt aus der screen --helpAusgabe

-dmS name Als Daemon starten: Bildschirmsitzung im getrennten Modus."

Antwort3

@daily /usr/bin/screen -dms aquaticscenery /ig.py && python ig.py

verwandte Informationen