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

Ressource vorübergehend nicht verfügbar, Bad Gateway 5xx (Nginx)

Hosting mit sehr vielen Besuchern kann es vorkommen dass die standardmäßige verbindungsanzahl von 128 überschritten wird. Dies führt zu einer Vielzahl von Fehlern.

Am besten sie prüfen einmal bei ihrem Hosting-Provider wie die standardmäßige Einstellung aussieht. Dafür verbinden sie sich mit Putty oder einem anderen SSH-Client und geben im Terminal folgendes ein:

cat /proc/sys/net/core/somaxconn

Dort erhalten Sie die Anzahl der maximalen Verbindungen. Um diese verbindungsanzahl sagen wir mal auf die Anzahl der Ports zu erhöhen geben sie folgenden Befehl ein.

sudo echo „net.core.somaxconn = 65535“ | tee -a /etc/sysctl.conf

sudo sysctl -p

Das Spiel wiederholt sich für einen anderen Parameter. 

cat /proc/sys/net/core/netdev_max_backlog

sudo echo „net.core.netdev_max_backlog = 65535“ | tee -a /etc/sysctl.conf

sudo sysctl -p

Viel Spaß mit ihrem high-performance Server.

Veröffentlicht am Schreiben Sie einen Kommentar

NGINX Einfache DDoS-Abwehr

Dies ist weit entfernt von einer sicheren DDoS-Abwehr, kann aber einige kleine DDoS verlangsamen. Diese Konfiguration ist für eine Testumgebung gedacht und Sie sollten Ihre eigenen Werte verwenden.

# limit the number of connections per single IP
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;

# limit the number of requests for a given session
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

# zone which we want to limit by upper values, we want limit whole server
server {
    limit_conn conn_limit_per_ip 10;
    limit_req zone=req_limit_per_ip burst=10 nodelay;
}

# if the request body size is more than the buffer size, then the entire (or partial)
# request body is written into a temporary file
client_body_buffer_size  128k;

# buffer size for reading client request header -- for testing environment
client_header_buffer_size 3m;

# maximum number and size of buffers for large headers to read from client request
large_client_header_buffers 4 256k;

# read timeout for the request body from client -- for testing environment
client_body_timeout   3m;

# how long to wait for the client to send a request header -- for testing environment
client_header_timeout 3m;