blob: e147fc8256fd950750f18178f5de8b925ae5989d [file] [log] [blame]
#! /usr/bin/expect
#
# autoboot-helper -- automatic boot helper
#
# Some machines have real issues rebooting. This helper watches their
# console output for the telltale signs of a reboot in progress. When
# spotted this triggers an automated 'manual' hardreset. For use when
# machines fail to reboot at the BIOS level.
#
# (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 "autoboot-numaq"
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"
}
set timeout -1
set likely 0
expect_user {
{TEST;} {
warn "test trigger detected"
exp_continue
}
{Unmounting file systems} {
note "controlled reboot in progress ..."
set likely [clock seconds]
exp_continue
}
{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
}
{Restarting system.} {
if {$likely != 0} {
warn "shutdown complete, restart indicated"
puts "~\$hardreset"
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
}
}