Forums Neueste Beiträge
 

Der freundliche Auslogger

25/03/2008 - 23:28 von Andreas Kohlbach | Report spam
Unter SuSE gab es zu meiner Zeit, als ich es noch benutzte, IIRC ein
Programm oder Skript, welches "freundlich" User ausloggte, wenn ein
Shutdown oder Reboot kam. So dass ggf. offene Dateien (Texte) geschlossen
wurden, auch die .bash_history geschrieben. Wenn man normal runter fàhrt,
passiert das bei eingeloggten Usern AFAIK nicht.

Leider weiß ich dessen Namen nicht mehr um zu schauen, ob es das auch bei
Debian gibt, was ich nun verwende.
Andreas

Warum Linux? http://www.getgnulinux.org/ (Englisch)
 

Lesen sie die antworten

#1 Helmut Waitzmann
26/03/2008 - 02:58 | Warnen spam
Andreas Kohlbach writes:

Unter SuSE gab es zu meiner Zeit, als ich es noch benutzte, IIRC ein
Programm oder Skript, welches "freundlich" User ausloggte, wenn ein
Shutdown oder Reboot kam. So dass ggf. offene Dateien (Texte) geschlossen
wurden, auch die .bash_history geschrieben.



Das kann es in der von Dir geforderten Allgemeinheit nicht geben:

Beim Runterfahren werden an Benutzerprozesse Signale verschickt, und zwar
zunàchst ein »TERM«-Signal, dann, falls der Prozess nach einigen Sekunden
noch immer lebt, ein »KILL«-Signal.

Um automatisches Sichern zu bewerkstelligen, müsste man den Programmen
beibringen, auf den Empfang eines »TERM«-Signals hin Dateien zu sichern.
Ob und wie das einem Programm beigebracht werden kann, hàngt vom Programm
selbst ab.

Beim Shell z.B. könntest Du ein »trap« auf das »TERM«-Signal einrichten.

Schreibe in die Datei »"$HOME"/.bashrc«:

# O /
#=X
# O \

# "$HOME"/.bashrc

my_history_save_if_required ()
{
if test -z "${my_history_dont_save:+defined}" \
-a -n "${HISTFILE:+defined}"
then
# history abspeichern
history -w
fi
# Das History nicht (ein weiteres Mal) abspeichern, da es
# entweder gerade geschehen ist oder ueberhaupt nicht geschehen
# soll:
unset HISTFILE
}

my_history_save_deny ()
{
my_history_dont_save='y'
}

my_history_save_require ()
{
my_history_dont_save=''
}

# In einem interaktiven Shell kann ich das Speichern des History's
# anschalten mittels des Kommandos
#
# my_history_save_require
#
# und abschalten mittels
#
# my_history_save_deny
#
# . Ich will als Voreinstellung haben: history abspeichern (Achtung!
# gefaehrlich, falls mehrere Shells gleichzeitig speichern wollen,
# z.B. beim Herunterfahren).

# Wenn ich aber immer nur ein einziges Shell laufen habe, kann ich mir
# das leisten:

my_history_save_require

# Wer vorsichtiger ist, schreibt hier lieber
#
# my_history_save_deny
#
# und tippt dann in nur einem einzigen seiner interaktiven Shells
#
# my_history_save_require
#
# ein. Dann wird nur dort das history beim Beenden abgespeichert.

# Richte ein Trap auf das uneigentliche Signal »EXIT« (siehe Manual-Page
# des Shells) ein. Das Trap wird verwendet, wenn das Shell sich beendet
# -- sei es, dass es das Shell-Kommando "exit" ausfuehrt oder dass es ein
# HUP-Signal erhaelt.

trap 'my_history_save_if_required' EXIT

# Interaktive Shells sind gegen das TERM-Signal von Haus aus immun.
# (Das kommt aus einer Zeit, als es noch keine Job-Groups gab. Damals
# wollte man mittels
#
# kill -TERM 0
#
# alle Hintergrundprozesse beenden wollen, ohne das interaktive Shell
# selbst zu beenden. Heutzutage hat man aber praktisch ueberall
# Job-Groups zur Verfuegung und das Abschieszen der Hintergrundprozesse
# funktioniert deshalb so nicht mehr. Daher kann ich auf dieses Relikt
# verzichten.)

# Die Immunitaet gegen das TERM-Signal kann ich aber aufheben, indem ich
# auf das TERM-Signal ein Trap einrichte, das dem Shell ein HUP-Signal
# schickt. Dadurch schickt es sich ein HUP-Signal, wenn es ein
# TERM-Signal erhaelt und reagiert dadurch schlieszlich wie beim
# HUP-Signal:

trap 'kill -s HUP "$$"' TERM

# \ O
#-X==# / O
Wer mir E-Mail schreiben will, stelle | When writing me e-mail, please
bitte vor meine E-Mail-Adresse meinen | precede my e-mail address with
Vor- und Nachnamen, etwa so: | my full name, like
Helmut Waitzmann , (Helmut Waitzmann)

Ähnliche fragen