Business Script was NAS herunterfährt, wenn das Backup erfolgreich ist?

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Hi!

Um genau zu sein, wollte ich schauen ob ich die Werte die Bereits in der Variable "varCurentDate" enthalten sind weiter nutzen, kann um die Variable "varCurentMonth" mit dem Wert "Feb" zu befüllen.

Okay. Ich glaub’ jetzt hab ich es. Du setzt mit date einen Timestamp und filterst dir anschließend die einzelnen Werte (Monat, Tag, Stunde, Minute, Sekunde) aus diesem Timestamp heraus, richtig? Also so...

Bash:
-----------------------------------------------------------------------------
Script
-----------------------------------------------------------------------------
# Timestamp - Beispiel: Feb 04 10:40:05 +0100
varCurentDate=$(date -d @"$unixTimeStamp" '+%b %d %H:%M:%S %z')
echo "Timestamp: ${varCurentDate}"

# Monat
varCurentMonth=$(echo "${varCurentDate}" | cut -d " " -f1)
echo "Monat: ${varCurentMonth}"

# Tag
varCurentDay=$(echo "${varCurentDate}" | cut -d " " -f2)
echo "Tag: ${varCurentDay}"

# Uhrzeit
varCurentTime=$(echo "${varCurentDate}" | cut -d " " -f3)
echo "Uhrzeit: ${varCurentTime}"

# Stunde
varCurentHour=$(echo "${varCurentDate}" | cut -d " " -f3 | cut -d ":" -f1)
echo "Stunde: ${varCurentHour}"

# Minute
varCurentMinute=$(echo "${varCurentDate}" | cut -d " " -f3 | cut -d ":" -f2)
echo "Minute: ${varCurentMinute}"

# Sekunde
varCurentSecond=$(echo "${varCurentDate}" | cut -d " " -f3 | cut -d ":" -f3)
echo "Sekunde: ${varCurentSecond}"


-----------------------------------------------------------------------------
Ausgabe im Terminal:
-----------------------------------------------------------------------------

Timestamp: Feb 07 18:56:04 +0100
Monat: Feb
Tag: 07
Uhrzeit: 18:56:04
Stunde: 18
Minute: 56
Sekunde: 04

Dann würde mein Vergleich so aussehen - Syntax ist falsch, aber ich hoffe ihr wisst was ich meine:
if -> Timestamp Protokoll == Timestamp Variable && value1 Protokoll == varActionBackup && value2 == varStatusComplete && value3 == varSubactionCheckComplete && value4 == -> then -> shutdown Remoteserver.
Der Teil war mir bereits klar, habe den Vergleich zuletzt nur auf das Wesentliche beschränkt. Die Kür wird werden, anhand des Timestamp Datums, das passende Protokoll Datum rauszufiltern um dann in dieser bzw. in allen nachfolgenden Zeilen die Werte Protokoll == varActionBackup && value2 == varStatusComplete && value3 == varSubactionCheckComplete && value4 zusammen auftauchen. Das wird sicherlich noch lustig bzw. knifflig werden. Auch wie man eine gewisse Sicherheit implementiert, damit der Remote Server nicht versehentlich runtergefahren wird. Lustig wird bestimmt auch ein Jahreswechsel, da das Jahr nicht mit angegeben ist. Je nach Alter des Protokolls würde man den 07 Feb evt. mehrfach in Verbindung mit ABFB finden.

Tommes
 
Zuletzt bearbeitet:

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
@Tommes Jetzt lass mich bitte nicht dumm sterben...
Was ist denn der Unterschied zu meinem bisher erwähnten Weg direkt über date mit dem UNIX Timestamp aus Beittrag #58. Hier kann man sich doch jedes beliebige Konstrukt zusammenbauen ganz ohne zusätlich angefügten cut command in der pipe.

Wo bitte ist der Benefit?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Jetzt lass mich bitte nicht dumm sterben...
Haha… ich bin mir ja auch nicht sicher, ob ich richtig liege, aber ich beziehe mich nochmal auf @Zottelhias Aussage (der fett geschriebe Teil)…

Mit "varCurentDate=date" wollte ich die Variable "varCurentDate" befüllen. Mit "$varCurentDate" wollte ich nun schauen ob auch wirklich etwas geliefert bekomme.
Das Ergebnis sollte nun sein, dass die Variable "varCurentMonth" mit den Informationen aus der Variable "varCurentDate" und der Option "+%b" den Wert "Feb" erhält.
… was mich letzten Endes dazu gebracht hat, den ursprünglichen Timestamp in seine Einzelteile zu legen und nicht stets einen neuen Timestamp zu erstellen, wo nur die jeweilige Information herausgefiltert wird, die man möchte. Es soll also nur einmal der Befehl date ausgeführt werden, um daraus alles andere abzuleiten. Das ist in meinem Augen der Unterschied zwischen meinem Vorschlag und deinem Aus Beitrag #58
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Haha… ich bin mir ja auch nicht sicher, ob ich richtig liege
Ohne Bezug auf irgendetwas zu nehmen was @Zottelhias hier eigentlich möchte.
Vergleiche bitte einmal die Kommandos und deren Resultate aus unseren beiden Beiträgen #58 und #61.
Wenn du mir weiß machen möchtest es sind zwei unterschiedliche Ergebnisse dann darfst du mich auch gerne des Besseren belehren.

Ja ich weiß... es führen bekanntlich viele Wege nach Rom und jeder kann den Weg nach seinem persönlichen Geschmack bzw. Empfinden wählen.

Nichts desto trotz ist es nun keine neue Information im Bezug dessen die benötigten Informationen aus einem Zeitstempel zu entnehmen.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Döödümm… …ah… 🤪 …echt jetzt… @luddi, ganz ehrlich: ich sollte aufhören mit dem Scheiß und wieder anfangen mit Wachsmalstiften auf Papier rum zu kritzeln. Gott, bin ich dämlich!

Ja. Du hast natürlich vollkommen recht. Dein Beitrag #58 spiegelt genau das wieder, was ich grade, nur anders, dargestellt hatte. Ich habe mich in deinem Script immer von dem Variablennamen varCurentDate ablenken lassen und nicht darauf geachtet das du immer von der Variablen $unixTimeStamp ausgehst.

Hört ihr das auch… diese Stimmen? Ich glaub sie kommen …um mich zu holen 🥴😵🤪
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Gott, ist das peinlich
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Und ich dachte schon, ICH bin der jenige der komische Stimmen hört o_O🤪

Oder für einen kurzen Moment dachte ich, es gibt hier niemanden der mich versteht weil ich wirres Zeug rede bzw. schreibe.
Aber danke @Tommes für die Aufklärung ;)

[...] ich sollte aufhören mit dem Scheiß und wieder anfangen mit Wachsmalstiften auf Papier rum zu kritzeln [...]
Ich würde mich hier gerne anschließen 😍
 

Zottelhias

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
96
Punkte für Reaktionen
3
Punkte
8
Ich kritzle mit meinem Sohn auf Paier - mit Holzstiften ;), das ist Entspannung pur. Ich feue mich schon auf Wasserfarben.
Die stimmen die ich höre sind meist sehr laut und schrill. Manchmal sind es auch nur meine Tinniten. :oops:


Auszug aus dem Protokoll von ABFB (Zeitraum= Jan 31): Beitrag #32

Gehen tut es nur um die zwei Zeilen aus dem Log - es ist ein Muster nachdem das angelegt wird:
Code:
Jan 31 23:19:13 +0100 [INFO] backup-handler.cpp:60(24192,140522899502848)    request is {"action": "backup", "agent": {"version": {"build": "12420", "major": 2, "mini": 2, "minor": 4}}, "ds_id": "26340e4b-0f8a-4473-af1d-337c6ad8d36c", "result_id": 653, "running_task_id": 59, "status": "complete", "subaction": "check_complete", "token": "6d081966267b5211f150fafa5589e86b"}
und
Code:
Jan 31 23:21:57 +0100 [INFO] backup-handler.cpp:60(24192,140522470237952)    request is {"action": "backup", "agent": {"version": {"build": "12420", "major": 2, "mini": 2, "minor": 4}}, "ds_id": "26340e4b-0f8a-4473-af1d-337c6ad8d36c", "result_id": 653, "running_task_id": 60, "status": "complete", "subaction": "check_complete", "token": "6d081966267b5211f150fafa5589e86b"}

Die gleichen Zeilen vom 07 Feb:
Code:
Feb 07 13:11:50 +0100 [INFO] backup-handler.cpp:60(8002,139840205465344)     request is {"action": "backup", "agent": {"version": {"build": "2631", "major": 2, "mini": 0, "minor": 5}}, "ds_id": "74ae950d-21a9-4c5f-9d13-3e97d1a1f663", "result_id": 2034, "running_task_id": 895, "status": "complete", "subaction": "check_complete", "token": "a09327fb5f25915ffa78dd468105085c"}
und
Code:
Feb 07 13:12:11 +0100 [INFO] backup-handler.cpp:60(8002,139840206518016)     request is {"action": "backup", "agent": {"version": {"build": "2631", "major": 2, "mini": 0, "minor": 5}}, "ds_id": "74ae950d-21a9-4c5f-9d13-3e97d1a1f663", "result_id": 2035, "running_task_id": 896, "status": "complete", "subaction": "check_complete", "token": "a09327fb5f25915ffa78dd468105085c"}

Genau gesagt erstmal nur um diesen String: "Jan 31".
Der beinhaltet das Kürzel des aktuellen Monats "Jan" und den aktuellen Tag "31" des Monats.

Zur Info:
Das Log geht bei mir nur bis zum 01.01.2023 ohne in das alte Jahr zu reichen.
Kann das jemand bestätigen?
Dann wäre die Vermutung naheliegend, dass immer nur das aktuelle Jahr oder so berücksichtigt wird.

Das will ich nun in Variablen so verpacken das ich die Variablen jederzeit auch für ander Zwecke weiter nutzen kann. Daher mein Vorhaben folgende Variablen anzulegen - wobei ich nicht wusste, wie ich den Inhalt reinbekomme:
varCurentDate = unix Datum > varCurentDate=$(date +%s)
varCurentMonth = Monatskürzel > varCurentMonth=$(date -d @"$varCurentDate" +%b)
varCurentDay = Zahl des Tages im Monat > varCurentDay=$(date -d @"$varCurentDate" +%d)
varBackupDateString = Monatskürzel + Zahl des Tages im Monat > varBackupDateString=$($varCurentMonth ++ $varCurentDay)

Meine erhoften ausgaben wären nun folgende (ohne ""):
echo $varCurentMonth = "Jan"
echo $varCurentDay = "31"
echo $varBackupDateString = "Jan 31"

Da ich ja auch lernen will, jongliere ich ein wenig. Meine Idee war:
Ich lege verschiedenste Variablen an. Die eine Variable varCurentDate=$(date) enthält das volle Datum.
Basierend auf der Variable $varCurentDate, wollte ich nun die Variable $varCurentMonth erstellen die als Inhalt "Jan" hätte - ohne das ich Code wiederholen muss. Basierend auf der Variable $varCurentDate, wollte ich nun die Variable $varCurentDay erstellen die als Inhalt bspw. "31" hätte.

Im Grundgenommen ist der folgende Abschnit der, der zutreffend ist, weil darauf aufbauend konnte ich nun alles ableiten um die Variablen zu erstellen, die ich benötige:
Code:
Code:
varCurentDate=$(date +%s)

varCurentMonth=$(date -d @"$varCurentDate" +%b)

echo $varCurentMonth

Feb
varCurentDate = unix Datum > varCurentDate=$(date +%s)
varCurentMonth = Monatskürzel > varCurentMonth=$(date -d @"$varCurentDate" +%b)
daraus ableitend konnte dann folgendes entstehen:
varCurentDay = Zahl des Tages im Monat > varCurentDay=$(date -d @"$varCurentDate" +%d)
nach ein wenig testen habe ich nun den String "Jan 31" in eine Variable wie folgt zusammen setzen können:
varBackupDateString = Monatskürzel + Zahl des Tages im Monat > varBackupDateString=("$varCurentMonth"" ""$varCurentDay")

Dabei bekomme ich nun "Feb 07" zurück, wenn ich mir das echo geben lasse:
Bash:
echo $varBackupDateString
Feb 07

Status:
Projekt Datum abgeschlossen.

Nächster Step
Jetzt fülle ich mir Variablen, welche auf ein erfolgreiches Backup schließen lassen, in dem ich den Inhalt des Logs gegen folgendes prüfen lasse:

Der Task ist ein Backup. Daher lasse ich prüfen ob ""action": "backup"" im Log steht.
varActionBackup=grep ""action": "backup"" /var/packages/ActiveBackup/target/log/agent$/active-backup-agent.log

Der Task muss erfolgreich gewesen sein. Daher lasse ich prüfen ob ""status": "complete"" im Log steht.
varStatusComplete=grep ""status": "complete"" /var/packages/ActiveBackup/target/log/agent$/active-backup-agent.log

Der Task muss außerdem noch ""subaction": "check_complete"" beinhalten was auch immer das bedeutet. Daher lasse ich prüfen ob's im Log steht.
varSubactionCheckComplete=grep ""subaction": "check_complete"" var/packages/ActiveBackup/target/log/agent$/active-backup-agent.log

Kann man dass, was ich in den sechs Zeilen oben beschreibe so machen oder spricht etwas dagegen?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Status:
Projekt Datum abgeschlossen.
Eigentlich schade, hatten wir uns doch grad erst warmgelaufen, uns gegenseitig in den Wahnsinn zu treiben. 😅

Nächster Step
Jetzt fülle ich mir Variablen, welche auf ein erfolgreiches Backup schließen lassen, in dem ich den Inhalt des Logs gegen folgendes prüfen lasse:

[…]

Kann man dass, was ich in den sechs Zeilen oben beschreibe so machen oder spricht etwas dagegen?
Im Prinzip spricht da nichts gegen. Am Ende kommt es halt darauf an, alle relevanten key/value Auswertungen zu berücksichtigen. Daher solltest du evtl. versuchen, herauszufinden, was z.B. genau dieser Wert bedeutet…
Der Task muss außerdem noch ""subaction": "check_complete"" beinhalten was auch immer das bedeutet.
… was also genau dabei gecheckt wird.

Ich würde vorschlagen, bevor @luddi und ich uns wieder total verhaspeln, wir abermals aneinander vorbei reden und uns Blitze aus den Augen schießen, das du einfach mal machst. Wie holen Cola und Popcorn, lehnen uns zurück und schauen uns an, was du treibst. Wenn dann jemand einen konstruktiven Beitrag leisten kann, weil es z.B. irgendwo hakt, wir die Hand gehoben und geholfen.
;)

So. Ich muss los

Tommes
 
  • Like
Reaktionen: peterhoffmann

Zottelhias

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
96
Punkte für Reaktionen
3
Punkte
8
Eigentlich schade, hatten wir uns doch grad erst warmgelaufen, uns gegenseitig in den Wahnsinn zu treiben. 😅
Wie recht du hast.

Im Prinzip spricht da nichts gegen. Am Ende kommt es halt darauf an, alle relevanten key/value Auswertungen zu berücksichtigen.
Ohne Worte.

Daher solltest du evtl. versuchen, herauszufinden, was z.B. genau dieser Wert bedeutet…
Da gebe ich dir recht. Wie kann ich das jemals mit gewissheit sagen? Ich glaube dann breche ich so ein Backup ab und dann werden wir sehen was da passieren wird.

… was also genau dabei gecheckt wird.
Das wird nur über versuche gehen.
Einblicke in den Programiercode haben wir nicht. Gibt es jemanden der einen Hinweis hat wie man das noch machen kann, welche ansätze man verfolgen kann etc.?
Vielleicht kennt jemand, jemanden, der einen Hinweis geben kann, weil er da Fit ist.
 

Fabio1010

Benutzer
Mitglied seit
29. Mai 2023
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Hast du dein Projekt unterdessen erfolgreich realisieren können? Das Skript würde mich sehr interessieren! Ich möchte damit zwar nicht die Syno ausschalten, jedoch die VpN Verbindung trennen nach erfolgreichem Backup...;-)
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Hier findest du die Info, wie du die VPN via Script termininieren kannst.
 

Fabio1010

Benutzer
Mitglied seit
29. Mai 2023
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Hier findest du die Info, wie du die VPN via Script termininieren kannst.
Danke, soweit bin ich bereits.

Möchte es aber nun mit einem Status-Check des Hyperbackups in ein Skript packen. In dieser Reihenfolge sollen die Tasks ablaufen:

1. VPN verbinden, 2. Backuptask mit Hyperbackup, 3. VPN trennen nach Abschluss des Backuptasks.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat