Switch για ακύρωση reboot/shutdown όταν τρέχει προκαθορισμένο process
George Notaras
gnot at g-loaded.eu
Tue Nov 25 19:45:31 EET 2008
Nikos Kavourinos wrote:
> George Notaras wrote:
>> Αυτό που ζητάω είναι:
>>
>> 1) Όταν στο PC ξεκινάει ένα συγκεκριμένο process A (πχ ένα backup job
>> μέσω cron), να δημιουργείται ένα αρχείο, πχ /var/lock/tonpoulo.lock.
>> Εύκολο, με τη χρήση ενός loader script για το process A, το οποίο θα
>> δημιουργεί το αρχείο.
>>
>> 2) Με βασική προϋπόθεση να _μην_ πειράξουμε κάποιο core αρχείο του
>> λειτουργικού, πώς θα γίνει το σύστημα, όταν εκτελούνται εντολές όπως
>> shutdown/reboot, να ελέγχει την ύπαρξη του αρχείου
>> /var/lock/tonpoulo.lock και σε περίπτωση ύπαρξής του να μην εκτελεί τη
>> διαδικασία shutdown;
>>
>> Υπάρχει κάποιος μηχανισμός που να δίνει αυτή τη δυνατότητα; Κι αν δεν
>> γίνεται σε επίπεδο initscripts, τα διάφορα γνωστά desktops (kde, gnome,
>> xfce) έχουν κάποιο τέτοιο μηχανισμό που να μπορεί κανείς να προσθέσει
>> ελέγχους σαν τον παραπάνω;
>>
>>
>> --
>> linux-greek-users mailing list -- http://lists.hellug.gr
>
> πιθανοτατα κατι σαν
>
> if [ -e /var/lock/tonpoulo.lock ]
> then echo `date` shutdown attempt aborted >> /var/log/syslog
> else
>
> ..... contents of init script for run level 6
>
> fi
>
> στη θεση του rc.6 script σου να κανει τη δουλεια
>
Thanks, αλλά προσπαθώ να αποφύγω την τροποποίηση κάποιου αρχείου που
μπορεί να αλλάξει μετά από μια αναβάθμιση κάποιου πακέτου.
Τελικά διαπίστωσα ότι πλέον χρησιμοποιείται κάποιος νέος μηχανισμός,
ονόματι upstart, ο οποίος έχει κάποια configuration files στο
/etc/event.d/. Για παράδειγμα για το rc6 είναι:
==================
start on runlevel 6
stop on runlevel
console output
script
set $(runlevel || true)
if [ "$2" != "0" ] && [ "$2" != "6" ]; then
set $(runlevel --set 6 || true)
fi
if [ "$1" != "unknown" ]; then
PREVLEVEL=$1
RUNLEVEL=$2
export PREVLEVEL RUNLEVEL
fi
exec /etc/rc.d/rc 6
end script
===========================
Έκανα μια δοκιμή στα γρήγορα:
touch /var/log/noshutdownreboot.lock
και τροποποίησα το παραπάνω αρχειο ως εξής:
================================================
start on runlevel 6
stop on runlevel
console output
script
# ****************
if [ -f /var/log/noshutdownreboot.lock ] ; then
logger -t rebootdog reboot prevented
exit 0
fi
# ****************
set $(runlevel || true)
if [ "$2" != "0" ] && [ "$2" != "6" ]; then
set $(runlevel --set 6 || true)
fi
if [ "$1" != "unknown" ]; then
PREVLEVEL=$1
RUNLEVEL=$2
export PREVLEVEL RUNLEVEL
fi
exec /etc/rc.d/rc 6
end script
=======================================
Στη συνέχεια, δίνοντας "reboot" πέφτει ο Χ και το σύστημα μένει σε μια
οθόνη όπου φαίνεται ότι έστειλε το μήνυμα "the system is going to
reboot", αλλά μετά τίποτα. Προφανέστατα φταίει η "exit 0" που έβαλα
παραπάνω. Μόνο με hard reset επανήλθε το σύστημα.
Όλα δείχνουν ότι πριν εκτελεστούν οι εντολές ανάμεσα στα "script" και
"end script" έχει εκτελεστεί κάτι άλλο. Θα πρέπει να διαβάσω το
documentation του upstart, γιατί όλα όσα δοκίμασα ήταν στην τύχη.
More information about the Linux-greek-users
mailing list