summaryrefslogtreecommitdiffstats
path: root/source/a/dcron/run-parts
blob: c12ee35367f3ec9af30d1bb574137410c5ff33fa (plain) (blame)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/bash
# run-parts - concept taken from Debian

# keep going when something fails
set +e

if [ $# -lt 1 ]; then
	echo "Usage: run-parts [--list | --test] <dir>"
	exit 1
fi

while [ $# -gt 1 ]; do
	case $1 in
		--list)
			list=1
			shift
			break
			;;
		--test)
			test=1
			shift
			break
			;;
		--)
			# -- end of options
			shift
			break
			;;
		*)
			# directory
			break
			;;
	esac
done

if [ ! -d $1 ]; then
	echo "Not a directory: $1"
	exit 1
fi

if [ -f /etc/default/run-parts ]; then
	. /etc/default/run-parts
fi

# Ignore *~ and *, scripts
for i in $(LC_ALL=C; echo ${1%/}/*[^~,]) ; do
	[ -d $i ] && continue
	# Don't run *.{bak,new,rpmsave,rpmorig,rpmnew,swp,cfsaved} scripts
	[ "${i%.bak}" != "${i}" ] && continue
	[ "${i%.new}" != "${i}" ] && continue
	[ "${i%.rpmsave}" != "${i}" ] && continue
        [ "${i%.rpmorig}" != "${i}" ] && continue
        [ "${i%.rpmnew}" != "${i}" ] && continue
        [ "${i%.swp}" != "${i}" ] && continue
	[ "${i%.cfsaved}" != "${i}" ] && continue
	[ "${i%,v}" != "${i}" ] && continue

	# jobs.deny prevents specific files from being executed
	# jobs.allow prohibits all non-named jobs from being run.
	# can be used in conjunction but there's no reason to do so. 
	if [ -r $1/jobs.deny ]; then
		grep -q "^$(basename $i)$" $1/jobs.deny && continue
	fi
	if [ -r $1/jobs.allow ]; then
		grep -q "^$(basename $i)$" $1/jobs.allow || continue
	fi

	if [ -e $i ]; then
		if [ -r $1/whitelist ]; then
			grep -q "^$(basename $i)$" $1/whitelist && continue
		fi

		if [ ${list:-0} = 1 ]; then
			echo $i;
		elif [ -x $i ]; then
			if [ ${test:-0} = 1 ]; then
				echo $i;
				continue
			fi
			if [ "$RANDOMIZE" != "" ]; then
				let "rtime = $RANDOM"
				if [ "$RANDOMTIME" != "" ]; then
					let "rtime %= $RANDOMTIME"
				else
					let "rtime %= 300"
				fi
				sleep $rtime
			fi

			# run executable files
			logger -p cron.notice -t "run-parts[$$]" "($1) starting $(basename $i)"
			$i 2>&1 | sed '1i\
'"$i"':\
'
			logger -p cron.notice -t "run-parts[$$]" "($1) finished $(basename $i)"
		fi
	fi
done

exit 0