Files
webgui/etc/rc.d/rc.mcelog

136 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
#
# script: rc.mcelog
#
# Startup script for mcelog
#
# Provides: mcelog
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: mcelog hardware error logging
# Description: Start the mcelog hardware error logging.
# This logs and handles CPU hardware errors on x86 systems.
#
# LimeTech - don't start if cpu not supported because ERROR message written to system log worries users
# Bergware - modified for Unraid OS, October 2023
DAEMON="MCElog daemon"
# run & log functions
. /etc/rc.d/rc.runlog
# mcelog mode
# valid values: daemon, trigger, cron
# Recommended value daemon
MCELOG_MODE="daemon"
# additional options to pass to the daemon
# this only works in daemon mode
# see the manpage for details. settings can be also
# set in /etc/mcelog.conf
MCELOG_OPTIONS=""
# private settings
MCELOG="${MCELOG:-/usr/sbin/mcelog}"
TRIGGER="/sys/devices/system/machinecheck/machinecheck0/trigger"
[[ -x $MCELOG ]] || ( echo "mcelog not found"; exit 1 )
[[ -r /dev/mcelog ]] || ( echo "/dev/mcelog not active"; exit 0 )
mcelog_running(){
sleep 0.1
ps axc | grep -q ' mcelog'
}
mcelog_start(){
log "Starting $DAEMON..."
local REPLY
if [[ $MCELOG_MODE == daemon ]]; then
if mcelog_running; then
REPLY="Already started"
else
# check cpu support (Intel)
if $MCELOG --is-cpu-supported &>/dev/null; then
$MCELOG --daemon $MCELOG_OPTIONS
if mcelog_running; then REPLY="Started"; else REPLY="Failed"; fi
else
REPLY="Skipped"
fi
fi
elif [[ -f $TRIGGER ]]; then
echo $MCELOG > $TRIGGER
REPLY="Triggered"
else
REPLY="No machine check capability"
fi
log "$DAEMON... $REPLY."
}
mcelog_stop(){
log "Stopping $DAEMON..."
local REPLY
if [[ $MCELOG_MODE == daemon ]]; then
if ! mcelog_running; then
REPLY="Already stopped"
else
killall -TERM $MCELOG
if ! mcelog_running; then REPLY="Stopped"; else REPLY="Failed"; fi
fi
elif [[ $MCELOG_MODE == trigger && -f $TRIGGER ]]; then
echo > $TRIGGER
REPLY="Triggered"
else
REPLY="Already stopped"
fi
log "$DAEMON... $REPLY."
}
mcelog_restart(){
log "Restarting $DAEMON..."
mcelog_stop
sleep 1
mcelog_start
}
mcelog_status(){
if mcelog_running; then
echo "$DAEMON is currently running."
else
echo "$DAEMON is not running."
exit 1
fi
}
case "$1" in
'start')
mcelog_start
;;
'stop')
mcelog_stop
;;
'restart')
mcelog_restart
;;
'try-restart')
if mcelog_running; then
mcelog_restart
fi
;;
'reload')
if mcelog_running; then
mcelog_restart
fi
;;
'force-reload')
mcelog_restart
;;
'status')
mcelog_status
;;
*)
echo "Usage: $BASENAME start|stop|restart|try-restart|reload|force-reload|status"
exit 1
esac
exit 0