Michelle Konzack schrieb: > Hallo, > > Gibt es eine möglichkeit, herauszufinden, ob ein Rechner neu gebootet > wurde? > > Ich habe folgendes Problem: > > Ein Programm wird gestartet und sammelt Daten und schreibt zwei Zahlen > in eine LOGDATEI welche ich mit einer einmaligne Kennung versehen will, > z.B. die Boot-Zeit des Systems. > > Nachteil: Ich kann KEINE init Scripts verwenden die beim booten eine > einmalige ID schreiben (wie "uptimed" zum Beispiel). > > Hat der Kernel etwas verfügbar, was man verwenden könnte? > > Thanks, Greetings and nice Day > Michelle Konzack > > Hallo Michelle, die Antwort kommt etwas spät, aber ich komme nicht immer dazu, in den Listen auf dem Laufenden zu bleiben. Wir haben hier für unsere Server (RedHat) ein entsprechendes Paket gestrickt: Das init-Script startet ein kleines Script, das im Hintergrund ständig einen Timestamp im System schreibt. Bei Start des Systems wird dann nachgeschaut, ob ein vorhandener Timestamp veraltet ist und gegebenenfalls ein Log geschrieben. Dieses Log ist so ausgelegt, daß es z.B. bei Wartungsarbeiten anschießend vom Admin kommentiert werden kann. Außerdem kann man bei Bedarf eine Mail versenden. Dabei wird immer die zugehörige Logzeile übertragen, die man dann auch remote auswerten könnte. /etc/init.d/auszeit (auszeit.init) /etc/sysconfig/auszeit (auszeit.sysconfig) /usr/local/sbin/auszeit.sh (auszeit.sh) /var/log/auszeit.tf (auszeit.tf) /var/log/auszeit (auszeit.log) Bei Debian wäre der richtige Platz für auszeit.sysconfig wohl /etc/default/auszeit. Außerdem muß das init-Script wohl etwas angepaßt werden. Die Intervalle sind auch noch in den Scripten fest programmiert. Man lönnte sie auch noch in die sysconfig auslagern... Für RedHat kann ich auch noch mit einem Spec-File dienen. Im Log kannst Du dann erkennen, ob das System regulär rebootet wurde, oder ob es durch Crash oder Powercycle aus der Kurve geflogen ist. Vielleicht hilft Dir das ja bei deinem Problem. Gruß Berthold
#!/bin/bash # # Version: 1.4 # # chkconfig: 2345 20 03 # description: Runs the auszeit-script for detecting crashes # processname: auszeit # # auszeit # # Protokolliert Reboot, Shutdown und Crashes # # Schreibt zyklisch Timestamps im laufenden System # # ZAIK/RRZK, Universitaet zu Koeln, WZ/CO, 2003 # Source function library. . /etc/init.d/functions # get the configuration if [ -f /etc/sysconfig/auszeit ]; then . /etc/sysconfig/auszeit fi RETVAL=0 prog=auszeit ausz=/usr/local/sbin/auszeit.sh ausztf=/var/log/auszeit.tf auszlog=/var/log/auszeit hostname_cmd="/bin/hostname" date_cmd="/bin/date" echo_cmd="/bin/echo" tail_cmd="/usr/bin/tail" send_mail() { host=`${hostname_cmd} --short` date=`${date_cmd}` message=`${tail_cmd} -1 ${auszlog}` ${echo_cmd} "To: ${receiver} From: ${sender} Subject: Ausfall: Rechner ${host} wurde rebootet! Der Rechner ${host} wurde aus unbekannter Ursache rebootet und ist nun (${date}) wieder online. Siehe /var/log/auszeit auf ${host}: $message} ***************************************** * Diese Mail wurde automatisch erzeugt! * ***************************************** "|/usr/lib/sendmail -t } start() { echo -n $"Starting $prog: " pidofproc $ausz >/dev/null RETVAL=$? if [ $RETVAL = 0 ] ; then action $"Starting $prog: " /bin/false exit 1 fi if [ -f $ausztf ] ; then maint=`/bin/cat $ausztf | grep MAINT` if [[ $maint == '' ]] ; then log_message UN xx 'Ausfall unbekannter Ursache' if [ -n "$receiver" ] && [ -n "$sender" ] && [ -n "$SEND_ALERT" ] && [ "$SEND_ALERT" = 'yes' ]; then send_mail fi else log_message SM xx 'Script durch service wieder gestartet' fi fi daemon $ausz 300 RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/auszeit return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc $ausz RETVAL=$? if [ $RETVAL = 0 ] ; then rm -f /var/lock/subsys/auszeit log_message SM xx 'Script durch service sauber gestoppt' # /bin/rm -f $ausztf echo 'MAINT' >> $ausztf fi echo return $RETVAL } log_message() { rs=$1 us=$2 ms=$3 da=`/bin/date '+%d. %H:%M'` se=`date '+%s'` oda=`/bin/cat $ausztf | /bin/grep DA | /usr/bin/cut -b 4-` ose=`/bin/cat $ausztf | /bin/grep SE | /usr/bin/cut -b 4-` sec=`/usr/bin/expr $se - $ose` sec=`/usr/bin/expr $sec + 30` min=`/usr/bin/expr $sec / 60` # echo -n $oda' - '$da # echo -n ' '$min | tail -5c # echo ' '$rs' '$us' '$ms echo -n $oda' - '$da >> $auszlog echo -n ' '$min | tail -5c >> $auszlog echo ' '$rs' '$us' '$ms >> $auszlog } # See how we were called. case "$1" in start) start ;; stop) stop ;; test) pidofproc $ausz echo $? ;; status) status $ausz RETVAL=$? ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit $RETVAL
#Ausfallursachekennnungen sind wie folgt definiert: #HA - Hardware-bedingter Ausfall #HM - Ausfall wegen Hardware-Pflegearbeiten #SA - Software-bedingter Ausfall #SM - Ausfall wegen Software-Pflegearbeiten #EN - Ausfall wegen Umwelteinfluessen (Strom, Klima etc.) #UN - Ausfall unbestimmter Ursache # #Zu SM: Gegebenfalls muss der Ausfallzeitraum manuell korrigiert werden. # # #
Attachment:
auszeit.sh
Description: application/shellscript
# Set 'SEND_ALERT=yes' if you want to send emails in case # of a crash. Default is 'no' #SEND_ALERT=no receiver="" sender=""
DA Mi. 06.12. 12:51 SE 1165405906