Wie kann die Betriebszeit verwendet werden, um eine Aktion auszulösen?


3

Ich möchte Shell- oder Perl-Code schreiben, der mich nach x Tagen benachrichtigt. Grundsätzlich ist auf SUSE Linux-Servern nach 208 Tagen ein Neustart erforderlich, da das System sonst einfrieren würde. Dies ist ein bekannter Fehler. Um dies zu vermeiden, möchte ich, dass eine Benachrichtigungsmail vor 8 Tagen bei mir eintrifft. Nur eine Warnung.

Das Skript muss die aktuelle Verfügbarkeit prüfen und dann die verbleibenden Tage für insgesamt 208 Tage berechnen. Hoffe das macht Sinn.


1
Das Richtige wäre natürlich, den Fehler zu beheben, der das verursacht.
grawity

Antworten:


7

Mit awk können Sie die Verfügbarkeit in Tagen leicht bestimmen:

# Print days of uptime, or zero if less than 1 day.
uptime | awk '/days?/ {print $3; next}; {print 0}'

Sie können dies zusammen mit der Befehlsersetzung verwenden, um basierend auf den Ergebnissen eine beliebige Aktion auszuführen. Zum Beispiel:

#!/bin/bash
days () { uptime | awk '/days?/ {print $3; next}; {print 0}'; }
UPTIME_THRESHOLD=200
if [ $(days) -ge $UPTIME_THRESHOLD ]; then
    : # Take some action.
fi

Offensichtlich liegt es an Ihnen, welche Maßnahmen Sie ergreifen. Sie können sich selbst Nachrichten mailen, einen Neustart mit der beim Befehl oder irgendetwas anderes, das Sie für nötig halten.

Möglicherweise möchten Sie dieses Skript auch als täglichen Cron-Job einrichten, damit Ihre definierte Aktion ausgelöst wird, wenn der Schwellenwert für die Verfügbarkeit überschritten wird. Wenn Sie Root-Zugriff haben, können Sie das Skript einfach dort ablegen /etc/cron.daily/oder Sie können Ihre persönliche crontab so einrichten, dass dieses Skript einmal täglich aufgerufen wird.


1
Unter Linux ist das Lesen schneller /proc/uptime (Die erste Zahl ist die Betriebszeit in Sekunden).
grawity

1

Inspiriert von der Antwort von CodeGnome, wurde ein kleines Skript für den Mac erstellt, in dem eine Benachrichtigung angezeigt wird, nachdem der Computer für 8:30 Uhr eingeschaltet wurde. Außerdem musste cron so konfiguriert werden, dass es jede Minute ausgeführt wird.

#!/bin/bash
timeup () { uptime | awk  '{print $3}'; }
UPTIME="8:30,"
if [ $(timeup) == $UPTIME ]; then
    osascript -e 'tell app "Finder" to display dialog "8:30 uptime! Go Home!"' &
    osascript -e 'display notification "8:30 uptime! Go Home!" with title "Go Home!!"' &
fi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.