summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-08-16 19:08:44 -0300
committerEuAndreh <eu@euandre.org>2024-08-16 19:08:44 -0300
commit4df7440ffeef7013408f5662ce12e13b37e03195 (patch)
treecd2e8f1ceb57f88bd44e9b05ab38b49ae94d37ef
parentsrc/reconfigure: Remove -h option (diff)
downloadsyskeep-4df7440ffeef7013408f5662ce12e13b37e03195.tar.gz
syskeep-4df7440ffeef7013408f5662ce12e13b37e03195.tar.xz
src/cronjob: Add simplified version
-rwxr-xr-xsrc/cronjob69
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