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