blob: 2623c5299e28aa3eb2e6eeeb29d1a2a2cced46a9 [file] [log] [blame] [edit]
#! /usr/bin/expect
#
# tickle-helper -- watch for reboots and 'tickle' the console during them
#
# Some consoles get broken when the machine reboots. There are normally
# fixed by trying to use them at or arround the reboot. Watch for reboots
# and initiate use of the console to trigger a drop/reconnect cycle.
#
# (C) Copyright IBM Corp. 2004, 2005, 2006
# Author: Andy Whitcroft <andyw@uk.ibm.com>
#
# The Console Multiplexor is released under the GNU Public License V2
#
set P "tickle-helper"
log_user 0
if {$argc != 0} {
puts stderr "Usage: $P"
exit 1
}
proc note {msg} {
global P
puts stderr "$P: $msg"
}
proc warn {msg} {
global P
puts stderr "$P: $msg"
puts "~\$msg $msg"
}
proc tickle {} {
set timeout 5
warn "tickling console ..."
puts ""
set now [clock seconds]
expect_user {
{blade: ERROR: console lost} {
}
{Elapsed time since release of system processors:} {
}
"*\n" {
if {([clock seconds] - $now) > 5} {
set now [clock seconds]
warn "tickling console ..."
puts ""
}
exp_continue
}
timeout {
set now [clock seconds]
warn "tickling console ..."
puts ""
exp_continue
}
}
set timeout -1
warn "tickle complete ..."
}
set timeout -1
set likely 0
expect_user {
{TEST;} {
warn "test trigger detected"
exp_continue
}
-re {Unmounting file systems|Unmounting local filesystems...} {
note "controlled reboot in progress ..."
set likely [clock seconds]
exp_continue
}
-ex {***** REBOOT LINUX *****} {
note "fsck failure occured ..."
set likely [clock seconds]
exp_continue
}
-re {HARDBOOT INITIATED|initated a hard reset} {
tickle
exp_continue
}
-re {Please stand by while rebooting the system|Restarting system} {
if {$likely != 0} {
warn "shutdown complete, restart indicated"
tickle
set likely 0
} else {
warn "likely false positive"
}
exp_continue
}
"*\n" {
if {$likely > 0 && ([clock seconds] - $likely) > 60} {
warn "trigger timeout"
set likely 0
}
exp_continue
}
}