Switch για ακύρωση reboot/shutdown όταν τρέχει προκαθορισμένο process

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Nov 28 05:31:56 EET 2008


On Fri, 28 Nov 2008 05:07:50 +0200, George Notaras <gnot at g-loaded.eu> wrote:
> Η αλήθεια είναι ότι με προβληματίζει κι εμένα το γεγονός ότι έχει τον
> απόλυτο έλεγχο του shutdown ένα endless loop. Επίσης, αν θυμάμαι καλά,
> για όσο διαρκεί το loop δεν είναι δυνατό το login με κανένα τρόπο.

Αυτό γίνεται επειδή το /sbin/shutdown δημιουργεί 5 λεπτά πριν το
shutdown (ή αμέσως αν έχεις δώσει ως shutdown time `now') το αρχείο
`/etc/nologin'.

Μπορείς στο init script που καθυστερεί το shutdown να κάνεις κάτι σαν:

    LF="/var/run/shutdown-blocked"

    lockfile "${LF}"
    if test $? -ne 0 ; then
            echo "cannot lock ${LF}"
            exit 1
    fi

    if test -f /etc/nologin ; then
            nologin=yes
    fi

    # do stuff

    if test -n "${nologin}" ; then
            touch /etc/nologin
    fi
    rm -f "${LF}"

> Δηλαδή, αν υπάρξει κάποιο πρόβλημα, θα μείνει το μηχάνημα αιώνια
> ανοιχτό;

Ναι, αλλά βλ. παραπάνω πως μπορείς να το αποφύγεις για όση ώρα το
shutdown είναι blocked.

Αυτό που θα σε δυσκολέψει _περισσότερο_ είναι ότι όταν φτάσει πλέον ο
έλεγχος σε ένα init.d script έχουν γίνει κι άλλα πράγματα που ίσως να
πρέπει να ξεγίνουν πριν μπλοκάρεις το shutdown:

    * Το runlevel έχει αλλάξει πλέον.
    * Η init έχει στείλει SIGTERM σε όσα processes μπορεί.

Γενικά, δε νομίζω ότι μπορεί ένα απλό shell script να κάνει αυτό που
θέλεις.  Θα χρειαστεί patching του shutdown για να υποστηρίζει κάποιο
είδος από startup checks, π.χ.:

    Πριν κάνει οτιδήποτε, το /sbin/shutdown τρέχει το script
    `/etc/rc.shutdown'.

    Το script τρέχει με παράμετρο μία λέξη από τις:

        reboot, halt, suspend, powerfail, powerfailnow, powerok

    ανάλογα με το τι προσπαθεί να κάνει το shutdown.

    Αν το script αποτύχει με exit code διαφορετικό του μηδενός, το
    shutdown action ακυρώνεται αμέσως και το /sbin/shutdown
    τερματίζει με exit code 75 (EX_TEMPFAIL).

Αυτό έχει ελπίδες να δουλέψει ακόμα κι αν το /sbin/shutdown τρέξει με
παράμετρο -n και παρακάμψει _εντελώς_ την init.



More information about the Linux-greek-users mailing list