errors=3
cbase=$HOME/sysd-mail-once-state
case "$1" in
- -h|--help)
- cat <<EOF
+ -h|--help)
+ cat <<EOF
Usage: sysd-log-once [-ERRORS] SERVICE COMMAND [ARGS...]
For systemd timers, email on repeated failure & success after failure.
-ERRORS: ERRORS is the number of failurs to accumulate before mailing the error.
Default is 3.
EOF
- exit 0
- ;;
- -[0-9]*)
- errors=${1#-}
- shift
- ;;
+ exit 0
+ ;;
+ -[0-9]*)
+ errors=${1#-}
+ shift
+ ;;
esac
service=$1
shift
[[ -d $cbase ]] || mkdir -p $cbase
if [[ ! $file ]]; then
- cursor=$(journalctl --show-cursor -qn0|sed 's/^\s*--\scursor:\s*//')
+ cursor=$(journalctl --show-cursor -qn0|sed 's/^\s*--\scursor:\s*//')
fi
if "$@"; then
- if [[ $file ]]; then
- rm -f $file
- if [[ $file == $c$errors ]]; then
- echo | mail -s "$HOSTNAME: $service success" $u@localhost
- fi
+ if [[ $file ]]; then
+ rm -f $file
+ if [[ $file == $c$errors ]]; then
+ echo | mail -s "$HOSTNAME: $service success" $u@localhost
fi
+ fi
else # $@ failed
- if [[ $file ]]; then
- i=${file#$c}
- if (( i < errors )); then
- new_file=$c$((i+1))
- mv $file $new_file
- file=$new_file
- if [[ $file == $c$errors ]]; then
- journalctl -u $service.service --after-cursor=$(<$file) | \
- mail -s "$HOSTNAME: $service failure" $u@localhost
- fi
- fi
- else
- file=${c}1
- printf "%s\n" "$cursor" >$file
+ if [[ $file ]]; then
+ i=${file#$c}
+ if (( i < errors )); then
+ new_file=$c$((i+1))
+ mv $file $new_file
+ file=$new_file
+ if [[ $file == $c$errors ]]; then
+ journalctl -u $service.service --after-cursor=$(<$file) | \
+ mail -s "$HOSTNAME: $service failure" $u@localhost
+ fi
fi
+ else
+ file=${c}1
+ printf "%s\n" "$cursor" >$file
+ fi
fi