Veröffentlicht am Schreiben Sie einen Kommentar

Wie Sie mit einem einfachen Bash-Skript Ihren Linux-Server optimieren und MariaDB bei hoher Swap-Auslastung neu starten können

Getestet mit Debian 12.2 / AlmaLinux

Wie man MariaDB automatisch neu startet, wenn die Swap-Auslastung zu hoch ist

MariaDB ist ein beliebtes Open-Source-Datenbankmanagementsystem, das auf vielen Linux-Servern eingesetzt wird. Es kann jedoch vorkommen, dass MariaDB zu viel Speicher verbraucht und den Swap-Speicher beansprucht, was die Leistung des Servers beeinträchtigen kann. In diesem Beitrag werde ich Ihnen zeigen, wie Sie ein einfaches Bash-Skript schreiben können, das die RAM- und Swap-Auslastung in Prozent anzeigt und MariaDB neu startet, wenn die Swap-Auslastung über 50% liegt. Dies kann nützlich sein, um MariaDB regelmäßig zu optimieren und zu vermeiden, dass der Server überlastet wird.

#!/bin/bash

# Display RAM usage in percent
echo "RAM Usage:" 
free | awk '/Mem/{printf("Used: %.2f% \n"), $3/$2*100.0}'

# Display Swap usage in percent
echo "Swap Usage:" 
SWAP_TOTAL=$(swapon -s | awk 'NR>1{print $3}')
SWAP_USED=$(swapon -s | awk 'NR>1{print $4}')
SWAP_USAGE=$(echo "scale=2; $SWAP_USED/$SWAP_TOTAL*100" | bc)
echo "Used: $SWAP_USAGE%"

# Check if the Swap usage is over 50%
if (( $(echo "$SWAP_USAGE > 50" | bc -l) )); then
    echo 'Swap usage is over 50%, restarting MariaDB...'
    sudo systemctl restart mariadb
else
    echo 'Swap usage is under 50%, no need to restart MariaDB.'
fi
Veröffentlicht am Schreiben Sie einen Kommentar

Server: Prozesse automatisch Neustarten (Shell-Script)

Startet z.B. MariaDB neu falls dieser nicht mehr läuft. Dieses funktioniert und ist getestet mit Debian 11.
Falls MariaDB nicht mehr laufen sollte wird dieser Service einfach neugestartet. Dieses lässt sich auch für andere Services erweitern. Schade das es WatchDog nicht mehr gibt für Debian 11.
Dieses Shell-Script funktioniert mit bash und sh.

#!/bin/bash

# Überprüfen, ob der MariaDB-Dienst läuft
if systemctl is-active --quiet mariadb
then
    echo "MariaDB läuft."
else
    echo "MariaDB läuft nicht. Starte MariaDB neu..."
    # MariaDB neu starten
    systemctl start mariadb
    if systemctl is-active --quiet mariadb
    then
        echo "MariaDB wurde erfolgreich neu gestartet."
    else
        echo "Fehler beim Neustart von MariaDB."
    fi
fi

Hier ist eine detaillierte Beschreibung:

  1. #!/bin/bash: Dies ist der Shebang, der angibt, dass das Skript mit bash, der Bourne-Again-Shell, ausgeführt werden soll.
  2. if systemctl is-active --quiet mariadb: Dieser Befehl überprüft, ob der MariaDB-Dienst aktiv ist. Wenn der Dienst aktiv ist, gibt systemctl is-active --quiet mariadb einen Exit-Code von 0 zurück.
  3. echo "MariaDB läuft.": Wenn der MariaDB-Dienst läuft, wird diese Nachricht ausgegeben.
  4. else: Dieser Teil des Skripts wird ausgeführt, wenn der MariaDB-Dienst nicht läuft.
  5. echo "MariaDB läuft nicht. Starte MariaDB neu...": Diese Nachricht wird ausgegeben, wenn der MariaDB-Dienst nicht läuft.
  6. systemctl start mariadb: Dieser Befehl versucht, den MariaDB-Dienst zu starten.
  7. if systemctl is-active --quiet mariadb: Nach dem Versuch, den Dienst zu starten, überprüft das Skript erneut, ob der Dienst jetzt läuft.
  8. echo "MariaDB wurde erfolgreich neu gestartet.": Wenn der Dienst erfolgreich gestartet wurde, wird diese Nachricht ausgegeben.
  9. else echo "Fehler beim Neustart von MariaDB.": Wenn der Dienst immer noch nicht läuft, wird diese Fehlermeldung ausgegeben.

Cronjob mittels Crontab -e

 einen Cronjob zu erstellen, der alle 5 Minuten überprüft, ob ein Prozess läuft, können Sie den crontab-Befehl verwenden. Hier ist ein Beispiel, wie Sie das tun können:

  1. Öffnen Sie Ihren Crontab mit dem Befehl crontab -e.
  2. Fügen Sie die folgende Zeile hinzu, um Ihr Skript alle 5 Minuten auszuführen:
*/5 * * * * /pfad/zum/skript.sh

Ersetzen Sie /pfad/zum/skript.sh durch den tatsächlichen Pfad zu Ihrem Skript.

Dieser Cronjob wird nun alle 5 Minuten ausgeführt und überprüft, ob der MariaDB-Prozess läuft, und startet ihn neu, wenn er nicht läuft.

Bitte beachten Sie, dass Sie möglicherweise sudo vor dem crontab-Befehl benötigen, abhängig von Ihren Systemberechtigungen. Stellen Sie außerdem sicher, dass Ihr Skript ausführbare Berechtigungen hat. Sie können dies mit dem Befehl chmod +x /pfad/zum/skript.sh erreichen. 

Veröffentlicht am Schreiben Sie einen Kommentar

Unix sftp Command mit Beispielen

Der Unix-Befehl „sftp“ steht für „Secure File Transfer Protocol“ und wird verwendet, um Dateien zwischen Computern zu übertragen. Im Gegensatz zu „ftp“ wird „sftp“ über eine verschlüsselte Verbindung durchgeführt, wodurch die Übertragung sicherer wird.

Hier sind einige Beispiele für die Verwendung von „sftp“:

  1. Verbindung zu einem Remote-Server herstellen Um eine Verbindung zu einem Remote-Server herzustellen, geben Sie den folgenden Befehl ein:
javaCopy codesftp benutzername@serveradresse

Zum Beispiel:

pythonCopy codesftp max@192.168.0.100

Nach der Eingabe des Befehls werden Sie aufgefordert, das Kennwort des Benutzers einzugeben. Wenn Sie das Kennwort korrekt eingegeben haben, wird eine Verbindung zum Server hergestellt.

  1. Herunterladen von Dateien vom Remote-Server Um eine Datei vom Remote-Server auf Ihren lokalen Computer herunterzuladen, geben Sie den folgenden Befehl ein:
csharpCopy codeget remotepfad lokalerpfad

Zum Beispiel:

pythonCopy codeget /home/max/testdatei.txt /Users/max/testdatei.txt

Dieser Befehl lädt die Datei „testdatei.txt“ vom Remote-Server in das lokale Verzeichnis „/Users/max/“.

  1. Hochladen von Dateien auf den Remote-Server Um eine Datei von Ihrem lokalen Computer auf den Remote-Server hochzuladen, geben Sie den folgenden Befehl ein:
Copy codeput lokalerpfad remotepfad

Zum Beispiel:

pythonCopy codeput /Users/max/testdatei.txt /home/max/testdatei.txt

Dieser Befehl lädt die Datei „testdatei.txt“ von Ihrem lokalen Verzeichnis „/Users/max/“ auf den Remote-Server in das Verzeichnis „/home/max/“.

  1. Anzeigen von Dateien und Verzeichnissen auf dem Remote-Server Um eine Liste der Dateien und Verzeichnisse auf dem Remote-Server anzuzeigen, geben Sie den folgenden Befehl ein:
bashCopy codels

Dieser Befehl zeigt eine Liste der Dateien und Verzeichnisse im aktuellen Verzeichnis auf dem Remote-Server an.

  1. Beenden der sftp-Sitzung Um die sftp-Sitzung zu beenden, geben Sie den folgenden Befehl ein:
bashCopy codeexit

Dieser Befehl beendet die sftp-Sitzung und kehrt zum lokalen Terminal zurück.