Δέσμη ενεργειών για εκκαθάριση διεργασιών Node.js που «κλειδώνουν» το web hosting σας

Αυτό το script πρέπει να εκτελείται ως cron job στον λογαριασμό φιλοξενίας σας (cPanel).

Δεν αποτελεί τέλεια λύση (καθώς δεν υπάρχει τέτοια) – είναι περισσότερο μια προσωρινή λύση (workaround), καθώς δεν αντιμετωπίζει το πραγματικό πρόβλημα. Αυτό που κάνει το script είναι να διαχειρίζεται τα “κολλημένα” (hanging) processes, στέλνοντάς τους ένα σήμα SIGTERM για να τερματιστούν — απελευθερώνοντας έτσι δεσμευμένους πόρους — και να δημιουργεί σταθερότητα γύρω από την εφαρμογή NodeJS που φιλοξενείται στον web server.

Σκοπός
Η εκτέλεση NodeJS εφαρμογών σε περιβάλλον cPanel είναι διαφορετική από την τοπική εκτέλεση NodeJS apps. Κάποιες διεργασίες μπορεί να αποτύχουν, προκαλώντας το σύστημα ελέγχου διεργασιών του cPanel να εκκινήσει μια νέα NodeJS instance – ή διεργασίες που θα έπρεπε να έχουν τερματιστεί, να παραμένουν “κολλημένες” ως ghost processes. Με τον καιρό, αυτό μπορεί να καταναλώσει όλους τους πόρους, μέχρι το Resource Monitor του cPanel να μπλοκάρει περαιτέρω χρήση.

cleanup_orphans.sh [options] 'SEARCHSTRING'

    Επιλογές:
    -v    Αναλυτική λειτουργία (verbose)
    -d    Dry-run - δείχνει τη συμπεριφορά χωρίς να κάνει αλλαγές
    -f    Force kill - χρησιμοποιεί SIGKILL αντί για SIGTERM
    -h    Βοήθεια (αυτό το μήνυμα χρήσης)

    Προεπιλεγμένο SEARCHSTRING: 'lsnode:/home/$USER/'

    Αν το script εκτελεστεί χωρίς 'SEARCHSTRING', θα περάσει μέσα από
    τον εσωτερικό πίνακα των domains (ονόματα φακέλων προστεθέντα στη 
    συμβολοσειρά αναζήτησης) για να καθαρίσει κάθε 'domain' ξεχωριστά.

Αν το script εκτελεστεί με συγκεκριμένο 'SEARCHSTRING' ως είσοδο, το προεπιλεγμένο SEARCHSTRING θα αντικατασταθεί από αυτό που δώσατε.

Διαφορετικά, το script θα επαναλαμβάνει τη διαδικασία για κάθε domain στον εσωτερικό πίνακα (array), καθαρίζοντας κάθε “domain” ξεχωριστά.

Καταγραφή (Logging)

Έχει ενσωματωθεί καταγραφή, ώστε να υπάρχει ιστορικό — μπορείτε έτσι να βλέπετε πόσες διεργασίες διαχειρίστηκε. Ωστόσο, υπερβολική καταγραφή μπορεί να δημιουργήσει νέο πρόβλημα, όπως εξάντληση του διαθέσιμου χώρου. Η λύση είναι να περιοριστεί η καταγραφή σε δύο αρχεία, το καθένα με έως 1000 γραμμές.

Εφαρμογή σε περιβάλλον cPanel

  1. Αντιγράψτε το script “ως έχει” στον τοπικό σας δίσκο.
  2. Το script περιέχει τον παρακάτω πίνακα (associative array) με τα root folder names όλων των Node.js εφαρμογών σας στο cPanel:
    declare -A domains
    domains[1]='mydomain.com'
    domains[2]='api.mydomain.com'
    domains[3]='dev.mydomain.com'
    domains[4]='test.mydomain.com'
    Επεξεργαστείτε τον πίνακα ώστε να ταιριάζει στη δική σας φιλοξενία.
  3. Επαληθεύστε ότι το SEARCHSTRING περιέχει αυτό που θέλετε να αναζητήσει το script:
    SEARCHSTRING="lsnode:/home/$USER/"
  4. Ρυθμίστε το μέγεθος του log αν επιθυμείτε. Αυτό είναι το κομμάτι που χειρίζεται το μέγεθος και την εναλλαγή (rotation) των log αρχείων:
    # rotate log - διατήρηση μεγέθους log σε αποδεκτό όριο
    LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l)
    if [ $LOGSIZE -gt 1000 ]; then
        mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1
    fi
  5. Αν θέλετε, αλλάξτε το LOGDIR – από προεπιλογή αποθηκεύει τα logs στον ίδιο φάκελο με το script.
  6. Δημιουργήστε έναν φάκελο στον web host σας για τα δικά σας scripts – για παράδειγμα: /cronscripts.
  7. Αντιγράψτε το προσαρμοσμένο cleanup_orphans.sh στο φάκελο του web host: /cronscripts/cleanup_orphans.sh.
  8. Προσθέστε ένα cron job στο cPanel. Προτείνεται να το εκτελείτε τακτικά, π.χ. κάθε 5–30 λεπτά (ανάλογα με τον φόρτο που δημιουργεί “ορφανές” διεργασίες).
    Παράδειγμα:
    */5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh
  9. Παρακολουθήστε την πρώτη εκτέλεση· δοκιμάστε τις επιλογές -v (verbose) και -d (dry-run). Ελέγξτε ότι δημιουργείται το αρχείο log και ότι το cron job εκτελείται όπως αναμένεται.

Έτοιμο! Οι “ορφανές” διεργασίες Node.js πλέον διαχειρίζονται αυτόματα.

Αρχικός οδηγός από έναν από τους έξυπνους πελάτες μας ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md

  • 0 Χρήστες το βρήκαν χρήσιμο
Ήταν χρήσιμη αυτή η απάντηση;

Δεν βρήκατε λύση;

Αν δεν βρήκατε λύση αναζητώντας ή περιηγούμενοι στις κατηγορίες μας, μπορείτε να ανοίξετε νέο αίτημα υποστήριξης.

Άνοιγμα Νέου Αιτήματος

Σχετικά άρθρα

Πώς να διορθώσετε τα σφάλματα 503 στον ιστότοπό σας

Ένα σφάλμα 503 εμφανίζεται όταν δεν υπάρχουν αρκετοί πόροι για να εκτελεστεί ένα script, με...

Πώς να περιορίσετε το μέγεθος των αρχείων error_log

Κάθε φορά που προκύπτει ένα σφάλμα PHP στον ιστότοπό σας – είτε πρόκειται για προειδοποίηση είτε...

Πώς να επιλύσετε σφάλματα 503 κατά τη μεταφόρτωση και εισαγωγή δεδομένων

503 Σφάλμα: Πώς να αντιμετωπίσετε την υπέρβαση ορίων διακομιστήΈνα σφάλμα 503 είναι πρόβλημα...

Δεν μπορώ να αποκτήσω πρόσβαση στις σελίδες μου, αλλά οι άλλοι μπορούν

Αν διαπιστώσετε ότι δεν μπορείτε να συνδεθείτε στο cPanel ή να δείτε τις σελίδες σας ενώ άλλοι...