diff options
author | EuAndreh <eu@euandre.org> | 2024-08-16 19:08:44 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-08-16 19:08:44 -0300 |
commit | 4df7440ffeef7013408f5662ce12e13b37e03195 (patch) | |
tree | cd2e8f1ceb57f88bd44e9b05ab38b49ae94d37ef | |
parent | src/reconfigure: Remove -h option (diff) | |
download | syskeep-4df7440ffeef7013408f5662ce12e13b37e03195.tar.gz syskeep-4df7440ffeef7013408f5662ce12e13b37e03195.tar.xz |
src/cronjob: Add simplified version
-rwxr-xr-x | src/cronjob | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/cronjob b/src/cronjob new file mode 100755 index 0000000..1adf29a --- /dev/null +++ b/src/cronjob @@ -0,0 +1,69 @@ +#!/bin/sh +set -eu + + +usage() { + cat <<-'EOF' + Usage: cronjob COMMAND... + EOF +} + + +if [ -z "${1:-}" ]; then + printf 'Missing COMMAND.\n\n' >&2 + usage >&2 + exit 2 +fi + + + +duration() { + minutes=$((${1} / 60)) + seconds=$((${1} % 60)) + printf '%sm%ss' "$minutes" "$seconds" +} + + +CMD="$*" +HOSTNAME="$(hostname)" +FROM="cronjob@$HOSTNAME" +TIMEOUT='10800' # three hours +STATUS_F="$(mkstemp)" +OUT="$(mkstemp)" + +email() { + { + cat <<-EOF + Content-Type: text/plain; charset=UTF-8 + Content-Transfer-Encoding: 8bit + From: $FROM + To: root@localhost + Subject: (exit status: $(cat "$STATUS_F")) - $HOSTNAME: $CMD + + EOF + cat "$OUT" + } | sendmail -t -f "$FROM" + rm -f "$OUT" "$STATUS_F" +} +trap email EXIT + +{ + cat <<-EOF + Running commad: $CMD + Starting at: $(timestamp -E) + + EOF + + START="$(now)" + STATUS=0 + timeout "$TIMEOUT" "$@" || STATUS=$? + printf '%s' "$STATUS" > "$STATUS_F" + END="$(now)" + DURATION_SECONDS=$((END - START)) + + cat <<-EOF + + Finished at: $(timestamp -E) + Duration: $(duration "$DURATION_SECONDS") + EOF +} 2>&1 | pre | ts '%Y-%m-%dT%H:%M:%S' | tee "$OUT" >> /var/log/cronjobs.log |