[Bash Script] Einlesen von zwei Zeilen (je ein Timestamp) aus Textdatei

  • Hallo,

    ggf. kann mir jemand kurz helfen...
    habe wenig bis keine Erfahrung mit eigenen Bash-Scripte schreiben (vorhandene ändern ist kein Problem :D)

    Was ich möchte:
    Ein Shell-Script, welches aus einer Datei zwei Zeilen ausliest, in diesen Zeilen stehen je ein Timestamp.
    Diese zwei Zeilen dann in zwei Variablen speichert, so dass ich mit diesen arbeiten kann.


    Was ich am Ende machen möchte:
    Ein Script, welches ggf. mehrmals täglich aufgerufen wird, öffnet und liest diese zwei Timestamps,
    und wenn die Differenz der Timestamps zu "Jetzt" größer gleich 3, bzw. 7 Tage ist, soll ein anderes Script, bzw. eine Aktion ausgeführt werden. Anschließend in der entsprechenden Zeile in der Datei den Timestamp auf "Jetzt" setzen.


    Sprich:
    Lies Zeile 1 ein, bilde die Differenz zu heute, wenn Differenz in Tagen >= 3, dann führe xyz aus, und speichere in Zeile 1 den aktuellen Timestamp.
    Anschließend lies Zeile 2 ein, ebenfalls Differenz zu heute, wenn Differenz >= 7 Tage, dann führe abc aus, und speichere in Zeile zwei den aktuellen Timestamp.


    Warum das Ganze?
    Ich nutze Unraid, dort gibt es leider kein Anacron, und mein Server ist keine 24h am laufen.
    Ich möchte jetzt also, jedes mal wenn mein Server in Standby geht, dass vorher das Script aufgerufen wird, und entsprechend diese Aktionen ausgeführt werden.
    Da mein Server ggf. mehr als einmal am Tag in Standby geht, brauche ich die "Sicherheit" dass die Aktion (xyz, oder abc) maximal einmal am Tag ausgeführt wird.

    xyz wäre in dem Fall ein MySQLBackup Script (mit erweiterten Zeilen, also, nciht einach nur ein mysqldump) und abc wäre den Appdata / Docker Pfad sichern.

    Ich weiß, da gibt es bereits plugins für die das zeitlich machen, aber beide nutzen den normalen Schredule / Cron. Aber, Cron wird, wenn der Zeitpunkt überschritten ist und das System aus, oder im Standby war, nicht nachgeholt, unter OMV nutzte ich deshalb Anacron, gibt es aber wohl nicht unter Unraid :(


    Oder andere Ideen?


    Grüße
    Acid


    Edit: oder ich könnte das hier amchem, anacron auf mein Unraid "kopieren"...
    https://forums.unraid.net/topic/45328-ad…e-task-handler/
    Nur die Warnung macht mir bissl Angst ^^
    Und hier wäre aber das Problem, wenn es blöd läuft fährt der Rechner durch das S3 PlugIn Script gerade in Sleep , während eines der Scripte läuft. in meiner oben genannten Eigenlösung laufen erst die Script durch, und dann kommt Sleep...

  • Anacron gibt es als Docker, allerdings nicht direkt bei den Community Apps. Hier musst Du die Suche unter "Get more Results from DockerHub" bemühen.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Kann ich Dir nicht beantworten, mein unRaid läuft 24/7. Evtl. mal in die Doku zum Anracron-Docker reinschauen.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Afaik: Aus einem docker Container aus Aufrufe an den host zu senden, spricht gegen das docker Prinzip. Hier sollen die Container ja gekapselt werden.
    Ist aber trotzdem möglich, zB mit einem webservice auf dem host oder mit ssh.
    Gibt aber sicher noch andere Wege, dies zu bewerkstelligen.
    Man kann allerdings auf den docker daemon aus einem Container zugreifen, wenn dieser explizit an den Container gereicht wird, der watchtower macht ja ähnliches (Container stoppen, löschen, updaten,...)

  • Bin aber kein Linux Crack:

    Code
    keks1=(sed -n '1 p' /pfad/zur/datei.txt)
    keks2=(sed -n '2 p' /pfad/zur/datei.txt)


    Speichert dir Zeile 1 in $keks1 und Zeile 2 in $keks2

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

  • Sooooo
    endlich kam ich mal dazu...

    hier das Ergebnis, getestet unter der Windows-Sub-Linux (WSL) Shell unter Windows 10 mit Debian.
    Muss es zu Hause noch in Ruhe testen... :D

    Wenn was zu verbessern gibt, immer her damit... Bin noch Bash-Anfänger... :(


    nochmal vielen dank @SkyBird1980 für die Code-Zeilen zum einlesen aus Dateien :D

    Einmal editiert, zuletzt von AcidRain (26. August 2019 um 14:48) aus folgendem Grund: arrays der Befehle umgeändert, damit es "einfacher" / "logischer" ist, neue Befehle hinzuzufügen zum array

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!