71 lines
1.5 KiB
Bash
Executable file
71 lines
1.5 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
# vim: set noet sw=2 ts=2 sts=2:
|
|
|
|
help() {
|
|
[ 0 -lt $# ] && >&2 echo "$*"
|
|
>&2 cat <<EOF
|
|
Usage: $0 [*options] command [*args]
|
|
|
|
Options:
|
|
-h
|
|
-t TO default: your login-user
|
|
-f FROM default: your login-user
|
|
-s SUBJECT default: "timer: [command *args]"
|
|
-e send email only on error (command exit-code != 0)
|
|
-o send email only if command writes something to syslog (default)
|
|
In Services, stdout and stderr are logged to syslog.
|
|
-a send always email
|
|
EOF
|
|
exit 42
|
|
}
|
|
|
|
if [ -z "$INVOCATION_ID" ]
|
|
then
|
|
>&2 echo 'No INVOCATION_ID set, not running systemd?'
|
|
fi
|
|
|
|
subject=
|
|
on=
|
|
to=
|
|
from=
|
|
|
|
eval set -- "$(getopt -n "$0" "ht:f:s:aev" "$@")"
|
|
while [ 0 -lt $# ]
|
|
do
|
|
case "$1" in
|
|
-h) help ;;
|
|
-s) shift ; subject="$1" ;;
|
|
-t) shift ; to="$1" ;;
|
|
-f) shift ; from="$1" ;;
|
|
-e) on=error ;;
|
|
-o) on=output ;;
|
|
-a) on=always ;;
|
|
--) shift ; break ;;
|
|
*) help "Unknown option: $1" ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
subject="${subject:-timer: $*}"
|
|
on=${on:-output}
|
|
to="${to:-${LOGNAME:-$USER}}"
|
|
from="${from:-${LOGNAME:-$USER}}"
|
|
|
|
"$@"
|
|
r=$?
|
|
|
|
# should a mail be sent?
|
|
mm=false
|
|
case "$on" in
|
|
always) mm=true ;;
|
|
error) [ 0 -lt $r ] && mm=true ;;
|
|
output) journalctl -n1 _SYSTEMD_INVOCATION_ID="$INVOCATION_ID" | grep -sqm1 "\S" && mm=true ;;
|
|
esac
|
|
|
|
if $mm
|
|
then
|
|
journalctl _SYSTEMD_INVOCATION_ID="$INVOCATION_ID" + INVOCATION_ID="$INVOCATION_ID" + USER_INVOCATION_ID="$INVOCATION_ID" | \
|
|
mail -s "$subject" -r "$from" -- "$to" || exit 97
|
|
fi
|
|
|
|
exit $r
|