Dieses Skript sollte als Cron-Job auf Ihrem cPanel-Webhosting-Konto ausgeführt werden.
Dies ist nicht die perfekte Lösung (da keine existiert) – es ist eher eine vorübergehende Lösung, da es die eigentlichen Probleme nicht behebt. Was das Skript tut, ist die Behandlung der Symptome (hängende Prozesse), indem es ihnen ein SIGTERM-Signal sendet, um sie zu beenden – und dadurch gesperrte Ressourcen freizugeben – was Stabilität rund um die auf dem Webhost gehostete NodeJS-App schafft.
Zweck
Das Ausführen von NodeJS-Anwendungen in einer cPanel-gehosteten Umgebung unterscheidet sich etwas vom lokalen Ausführen von NodeJS-Apps. Prozesse können fehlschlagen und dazu führen, dass das Prozesskontrollsystem von cPanel eine neue NodeJS-Instanz neu startet – oder Prozesse, die eigentlich beendet sein sollten, können als „Geisterprozesse“ hängen bleiben. Letztendlich kann dies alle Ressourcen verbrauchen, bis der Ressourcenmonitor von cPanel die weitere Nutzung blockiert.
cleanup_orphans.sh [Optionen] 'SUCHSTRING'
Optionen:
-v Ausführlich
-d Trockenlauf – zeigt das beabsichtigte Verhalten, ändert aber nichts
-f Erzwingen – verwendet SIGKILL statt SIGTERM
-h Hilfe (diese Gebrauchsanweisung)
Standard-SUCHSTRING: 'lsnode:/home/$USER/'
Wenn ohne 'SUCHSTRING' aufgerufen, durchläuft das Skript das interne
Array von Domains (Ordnernamen, die zum Suchstring hinzugefügt werden),
um jede 'Domain' einzeln zu bereinigen.
Wenn das Skript mit 'SUCHSTRING' als Eingabe aufgerufen wird, wird der vordefinierte SUCHSTRING durch die angegebene Eingabe ersetzt.
Andernfalls iteriert das Skript durch das interne Array von Domains (Ordnernamen, die zum Suchstring hinzugefügt werden), um jede „Domain“ einzeln nacheinander zu bereinigen.
Protokollierung
Die Protokollierung ist implementiert, um eine Historie zu haben – so können Sie nachverfolgen, wie viele Prozesse behandelt werden. Gleichzeitig kann zu viel Protokollierung ein neues Problem verursachen; wir wollen nicht, dass der Speicherplatz aufgrund endloser Protokollierung ausgeht. Die Lösung besteht darin, die Protokollierung auf zwei Dateien zu begrenzen, von denen jede bis zu 1000 Zeilen enthalten kann.
Implementierung in einer spezifischen cPanel-Lösung.
Implementierung in einer spezifischen cPanel-Lösung
- Kopieren Sie das Skript „wie es ist“ auf eine lokale Festplatte.
- Das Skript enthält dieses assoziative Array, das die Root-Ordnernamen aller cPanel-gehosteten Node.js-Apps enthält:
Bearbeiten Sie das Array in Ihrem bevorzugten Editor, damit es zu Ihrer spezifischen Webhosting-Konfiguration passt.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com' - Überprüfen Sie, dass SUCHSTRING tatsächlich das enthält, wonach das Skript suchen soll:
SEARCHSTRING="lsnode:/home/$USER/" - Passen Sie die Protokollgröße an, wenn Sie möchten. Dies ist der Teil, der die Protokollgröße und die Rotation der Protokolldateien verwaltet (ich werde hier nicht ins Detail gehen):
# rotiere Protokoll – halte Protokollgröße auf einem akzeptablen Limit LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi - Passen Sie LOGDIR an, wenn Sie möchten – es ist derzeit so eingestellt, dass im Skriptordner protokolliert wird.
- Erstellen Sie einen Ordner auf Ihrem Webhost, um Ihre eigenen Skripte zu speichern – zum Beispiel:
/cronscripts. - Kopieren Sie das angepasste
cleanup_orphans.shin den Webhost-Ordner:/cronscripts/cleanup_orphans.sh. - Fügen Sie einen Cron-Job in cPanel hinzu. Ich empfehle, das Skript regelmäßig auszuführen, z. B. alle 5–30 Minuten (abhängig vom Verkehrsaufkommen, das „verwaiste“ Prozesse erzeugt).
Beispiel:*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh - Überwachen Sie den ersten Lauf; probieren Sie die Flags -v (ausführlich) und -d (Trockenlauf) aus. Prüfen Sie, ob die Protokolldatei erstellt wird, und verifizieren Sie, dass der Cron-Job wie erwartet läuft.
Fertig! Ihre „verwaisten“ Node.js-Prozesse werden nun automatisch behandelt.
Originalanleitung erstellt von einem unserer cleveren Kunden ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md