tobiasnyc
Goto Top

CMD ShutdownScript ()

Ich bin auf der Suche nach einem Ansatz um ein sog. "Shutdownscript" sauber umzusetzten!

Letztendliches Ziel ist es einen Backup Zielserver herunterzufahren nach dem von allen "Sicherungs Clients" (z.Zt. 3Stk.) die "Windows Server Sicherung" abgeschlossen wurde.

Scripte für den ShutDown gibt es schon, die Schwierigkeit sehe ich darin, den Sicherungsstatus von allen drei Servern zu sammeln/abzufragen und nach der letzten beendeten Sicherung das Finale "ShutDownScript" für den Zielserver auszuführen.

1. Schritt: Den jeweiligen Status der einzelnen Sicherungen in eine oder in eine gemeinsame Log Datei (Freigabe) schreiben lassen. Ein über den Aufgabenmanager getriggertes BatchScript, dass auslöst wenn die Sicherung am jeweiligen Server abgeschlossen wurde (Event ID .... im Windows Ereignis Protokoll) und in einer etwaigen Log-Datei eine Information hinzufügt die die Information trägt, das die Sicherung abgeschlossen wurde!

2. Schritt: Jeder Server der die Sicherung abgeschlossen hat prüft diese Datei um nachzuschauen ob alle anderen Server die Sicherung schon abgeschlossen haben, wenn JA triggert er das Finale ShutDownScript und fährt den Zielserver herunter, wenn NEIN erfolgt nichts!

Die Frage: Würdet Ihr es genauso machen, und wenn ja, mit welchen konkreten Befehlen würdet ihr arbeiteten, gerne mit Beispielen. Ich bin leider kein routinierter "BatchProgrammer", daher bin ich über jegliche Beispiel Scripte mit möglichen Ansätzen dankbar die ich dann kombinieren könnte.
Es geht mir vor allen Dingen um den Prozess die Informationen zu sammeln (evtl. in einer LogDatei, sinnvoll?) und dann auszuwerten. Ansätze für das Finale ShutdownScript habe ich wie gesagt schon, auch die "Trigger" die auslösen wenn die Sicherung abgeschlossen wurde...

Vielen Dank für Eure Infos im voraus...

Content-ID: 642591

Url: https://administrator.de/contentid/642591

Ausgedruckt am: 21.11.2024 um 16:11 Uhr

Xerebus
Xerebus 20.01.2021 um 21:50:57 Uhr
Goto Top
Die client sicherungen machst du doch zu einen festen zeitpunkt.
Hau doch 2-3 stunden dazu und lass den backupserver dann automatisch herunterfahren.
TomTomBon
TomTomBon 21.01.2021 um 08:08:57 Uhr
Goto Top
Moin Moin,

viele Wege führen nach Rom und die Systematik hört sich schon gut an.

Mit einer Batch würde Ich nicht die Informationen in einer Datei über unterschiedliche Server zugreifen.
Ich hätte die Bedenken das da irgendetwas zwischen funkt.
Aber nur als Idee:
Der Prozess ist jeden Tag nur 1 mal.
Wenn jeder Server auf dem ZielServer in Ordner c:\Backup-Log einen Ordner %DATE% (20200121) schreibt,
und dorthinein die LOG Datei mit Name %ComputerNAME%.log

Solange die Server nur bei Erfolg dorthinein schreiben, kann Ich doch via Batch ohne Probleme abfragen ob die entsprechenden PCs dort die Logs geschrieben haben.
Dann noch einen Timer von vielleicht 5min stellen, damit die Logs sicher geschrieben sind, und Tschüss.

Nicht der schönste Weg, aber ein Weg.

Mein Senf


PS:
Ich habe mir angewöhnt die Variable %DATE% umzuformatieren.
for /f "delims=" %%a in ('powershell get-date((get-date^)^) -uformat "%%Y%%m%%d"') do set datum=%%a  
Dann ist das unabhängig von irgendwelchen lokalen Einstellungen und gut sortierbar face-smile

Konkret Nutze Ich dafür immer diesen Schnipsel:
set Stunde=%time: =0% 
set StartZeit=%Stunde:~0,2%-%TIME:~3,2%_Uhr
for /f "delims=" %%a in ('powershell get-date((get-date^)^) -uformat "%%Y%%m%%d"') do set datum=%%a  

set StartPunkt=_%Datum%__%StartZeit%_
echo %StartPunkt%
TomTomBon
TomTomBon 21.01.2021 aktualisiert um 08:27:54 Uhr
Goto Top
Übersichtlicher die Ergebnisse:
notepad++_7fuytxfbiy
TobiasNYC
TobiasNYC 23.01.2021 aktualisiert um 19:38:54 Uhr
Goto Top
Vielen Dank für die zahlreichen konstruktiven Antworten!
Unabhängig von den tollen Anregungen hier habe ich mir jetzt auch schon etwas zusammengebaut was seinen Zweck erfüllt..

Der erster Entwurf:
@echo off
for /F %%G in (BackupStatus.txt) do set VAR_StatusLevel=%%G
echo %VAR_StatusLevel%

if %VAR_StatusLevel%==0 (goto WriteStatus1)
if %VAR_StatusLevel%==1 (goto WriteStatus2)
if %VAR_StatusLevel%==2 (goto StartShutdown)

:WriteStatus1
echo 1 > BackupStatus.txt
echo Status 1 Set
goto END

:WriteStatus2
echo 2 > BackupStatus.txt
echo Status 2 Set
goto END

:StartShutdown
echo Starte Shutdown
echo 0 > BackupStatus.txt
goto END

:END
echo THE END ;-)

Der Code der jetzt produktiv im Test läuft sieht noch etwas anders aus da ich auf die Files über UNC-Pfade zugreife. Wenn es von Interesse ist kann ich das fertige Script grne noch mal anfügen!

Viel problematischer als das große Konzept waren eher die Detaillösungen die mir tlw. immer noch nicht klar sind, wie kann ich bspw. Zeilenweise nur eine Information aus einem File auslesen, usw...

Viele Grüße
TobiasNYC
TobiasNYC 23.01.2021 um 19:36:51 Uhr
Goto Top
... ja das war auch mein erster Ansatz, leider differiert die Sicherungsdauer sehr stark, abhängig davon ob eine vollständige oder nur eine inkementelle Sicherung durchgeführt wird. Außerdem steht der Sicherungsserver in einer Büroumgebung und macht deutliche Emissionen, daher sollte/muss er sich nach Abschluss der Sicherung sehr zeitnah "runterfahren"
TomTomBon
TomTomBon 23.01.2021, aktualisiert am 27.01.2021 um 19:47:03 Uhr
Goto Top
Wie gesagt.
Eine Abfrage ob das Log existiert.

Wenn das Log geschrieben wird nachdem die Sicherung fertig ist, und für die Übermittlung ein zusätzliches Fenster von 5 Minuten.
Im schlimmsten Fall wären hier die Logs nicht vollständig.

Im schlimmsten Fall ist die Sicherung nicht korrekt und das Log damit nicht übermittelt.
Und der Sicherung Server nicht down...
Was aber auch positive Aspekte hat.

Man schaut dort dann nach.