summaryrefslogtreecommitdiffstats
path: root/bin/cron_wrapper.sh
blob: f7376d1df702e384da40f7281064e533ea8fa0e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash
##
## Wrapper Script for Cronscripts
## Log all errors and stdout and sends only once a day an email
##
## (c) Alexander Sulfrian, Sep 2008
##

echo_error() {
	echo "$@" 1>&2
}

create_and_check_log() {
	if [ ! -e "${1}" ]
	then
		touch "${1}"
	fi

	if [ ! -w "${1}" ]
	then
		echo_error "Unable to open log: ${1}"
		exit 2
	fi
}

if [ -z "${1}" -o ! -x "${1}" ]
then
	echo_error
	echo_error "	Usage:"
	echo_error "	${0} filename [parameter]"
	echo_error
	echo_error "	The filename have to exists an have to be executable."
	echo_error
	exit 1
fi

CRON_SCRIPT="${1}"
CRON_SCRIPT_BASENAME="$(basename ${CRON_SCRIPT} ".sh")"
CRON_SCRIPT_LOGNAME="${CRON_SCRIPT_BASENAME#sync-}"
ERROR_LOG="/var/log/sync/${CRON_SCRIPT_LOGNAME}_error.log"
LOG="/var/log/sync/${CRON_SCRIPT_LOGNAME}.log"
LOCKFILE="/var/lock/${CRON_SCRIPT_LOGNAME}"

create_and_check_log "${ERROR_LOG}"
create_and_check_log "${LOG}"

ERROR_TMP=$(mktemp -t "${CRON_SCRIPT_BASENAME}.XXXXXXXX")

# parameter eins nach vorne shiften
# damit der cronscript dateiname nicht mehr enthalten ist
shift 1

# locking, cron script should not executed while the last
# instance is running
lockfile-create "$LOCKFILE" || exit 1
lockfile-touch "$LOCKFILE" &
TOUCH="$!"

# log header
LOG_HEADER="-------------------- $(date) --------------------"
echo "${LOG_HEADER}" >> "${LOG}"

# cron ausführen und output auffangen
${CRON_SCRIPT} $@ >> "${LOG}" 2> "${ERROR_TMP}"

if [ $(grep -v "^\s*$" "${ERROR_TMP}" | wc -l) -gt 0 ]
then
	if [ "$(date -r${ERROR_LOG} +%F)" != "$(date +%F)" ]
	then
		cat "${ERROR_LOG}"
		echo "${LOG_HEADER}"
		cat "${ERROR_TMP}"
		echo -n > "${ERROR_LOG}"
	else
		echo ${LOG_HEADER} >> "${ERROR_LOG}"
                cat "${ERROR_TMP}" >> "${ERROR_LOG}"
	fi
fi

rm "${ERROR_TMP}"

# cleanup lockfile
kill "$TOUCH"
lockfile-remove "$LOCKFILE"