Auf Textausgabe in screen warten

Das Kamel

Das Kamel

Mitglied
Moin,

ich habe ein Backup-Script für einen Gameserver.
Das Script schickt zu erst den Befehl an die screen-session mit
Code:
screen -S -X
Anschließend startet das Script den Dateitransfer zum Backupordner.

Das Problem bei der ganzen sache ist jetzt, dass der Speichervorgang noch nicht abgeschlossen ist, und somit immer ein etwas älteres Save übertragen wird.

Ich suche nach einer Möglichkeit auf die Meldung von Screen zu warten, das der Speichervorgang fertig ist und dann erst zu kopieren.

Die Möglichkeit eine konstante Wartezeit in das Script einzufügen habe ich auch shcon in Betracht gezogen, ist aber meiner Meinung nach in sofern ungünstig dass es ja unterschiedlich lange dauern zu Speichern.
 
Hi

Sind das zwei unterschiedliche Scripts? Ich verstehe den Ablauf nicht.
Ruf doch den Kopiervorgang nach dem Speichervorgang auf.
 
Es handelt sich um ein Script:
Code:
echo "Starte Backup"

echo "Welt speichern"
screen -S minecraft -X save-all
echo "Welt gespeichert"

VAR=$(date +"%Y-%m-%d_%H-%M")

echo "Starte Dateitransfer"
cp -v -R /home/minecraft/ /raid5/mcbackup/$VAR
echo "Dateitransfer abgeschlossen"

echo "Backup abgeschlossen"

Ich hätte es gerne dass das Script vor bzw. bis zu der Ausgabe "Welt gespeichert" auf die Meldung "Save completed" im Screen wartet.
 
Dann bau doch ein sleep mit ein.
Ich würde mir mal rsync als Alternative zu cp angucken. - Das vereinfacht das syncen ungemein.
Warum machst du das eigentlich so umständlich per screen? Nutz doch den cron-deamon oder feuer einen at-job ab, der dein Skript sofort ausführt. echo "<dein befehl oder skript>"|at now (oder sonstwann)
 
Mit dem sleep das stell ich mir nicht so einfach vor, da die Map immer weiter wächst, und somit denke ich auch der Dateitrnsfer zunehmend lange dauert.
Du meinst ich sollte den Inhalt des Scriptes direkt aus dem Cronjob ausführen und nicht das Script aufrufen lassen?
 
Was hälst du denn von sowas?



crontab -e

Hier fügst du folgende Zeilen hinzu:

0 2 * * * /absoluter-pfad/minecraft -X save-all
0 4 * * * /bin/tar cvf /raid5/mcbackup/`/bin/date "+%F"`-minecraft.tar /home/minecraft/

crontab -l zeigt dir deine vorhandenen Cronjobs an

Das geht zwar noch eleganter (Stichwort: "inkrementelles Backup"), aber das sollte funktionieren.

Man kann seine Befehle auch mit einem && verknüpfen, dann wird der zweite Befehl erst ausgeführt, wenn der erste erfolgreich gelaufen ist. ^^
 
Zuletzt bearbeitet:
0 2 * * * /absoluter-pfad/minecraft -X save-all
funktioniert definitiv nicht. Ich kann auch nicht nachvollziehen wie damit der Befehl zum speichern übermittelt werden soll.

@Tblue
expect sieht ganz interessant aus, allerdings steig ich da noch nicht ganz dahinter. Soll das in meinem Fall screen ersetzen? Oder kann das direkt mit der screen-session kommunizieren?
 
Du könntest ggf. in ner schleife den Rückgabewert abfragen.
also "echo $?"
Ob das ganze allerdings via screen session geht, hab ich noch nie getestet.
 
Zurück
Oben