libc/nls: Sync with FreeBSD.
[dragonfly.git] / usr.sbin / periodic / periodic.sh
blob7893df9e0350be01d9ccdaa7be4a73a812eb41da
1 #!/bin/sh -
3 # $FreeBSD: src/usr.sbin/periodic/periodic.sh,v 1.9.2.8 2002/05/21 03:09:35 brian Exp $
4 # $DragonFly: src/usr.sbin/periodic/periodic.sh,v 1.2 2003/06/17 04:29:59 dillon Exp $
6 # Run nightly periodic scripts
8 # usage: periodic { daily | weekly | monthly } - run standard periodic scripts
9 # periodic /absolute/path/to/directory - run periodic scripts in dir
12 usage () {
13 echo "usage: $0 <directory of files to execute>" 1>&2
14 echo "or $0 { daily | weekly | monthly }" 1>&2
15 exit 1
18 if [ $# -lt 1 ] ; then
19 usage
22 # If possible, check the global system configuration file,
23 # to see if there are additional dirs to check
24 if [ -r /etc/defaults/periodic.conf ]; then
25 . /etc/defaults/periodic.conf
26 source_periodic_confs
29 host=`hostname`
30 export host
31 tmp_output=`mktemp ${TMPDIR:-/tmp}/periodic.XXXXXXXXXX`
33 # Execute each executable file in the directory list. If the x bit is not
34 # set, assume the user didn't really want us to muck with it (it's a
35 # README file or has been disabled).
37 for arg
39 # Where's our output going ?
40 eval output=\$${arg##*/}_output
41 case "$output" in
42 /*) pipe="cat >>$output"
43 verbose=YES
45 "") pipe=cat
46 verbose=YES
48 *) pipe="mail -s '$host ${arg##*/} run output' $output"
49 verbose=NO
51 esac
53 success=YES info=YES badconfig=NO # Defaults when ${run}_* aren't YES/NO
54 for var in success info badconfig verbose
56 case $(eval echo "\$${arg##*/}_show_$var") in
57 [Yy][Ee][Ss]) eval $var=YES;;
58 [Nn][Oo]) eval $var=NO;;
59 esac
60 done
62 case $arg in
63 /*) if [ -d "$arg" ]
64 then
65 dirlist="$arg"
66 else
67 echo "$0: $arg not found" >&2
68 continue
69 fi;;
70 *) dirlist=
71 for top in /etc/periodic ${local_periodic}
73 [ -d $top/$arg ] && dirlist="$dirlist $top/$arg"
74 done;;
75 esac
78 empty=TRUE
79 processed=0
80 if [ "$verbose" = YES ]
81 then
82 echo "-- Start of $arg output -- `date`"
84 for dir in $dirlist
86 for file in $dir/*
88 if [ -x $file -a ! -d $file ]
89 then
90 output=TRUE
91 if [ "$verbose" = YES ]
92 then
93 echo "-- Start of $arg $file output -- `date`"
95 processed=$(($processed + 1))
96 $file </dev/null >$tmp_output 2>&1
97 rc=$?
98 if [ -s $tmp_output ]
99 then
100 case $rc in
101 0) [ $success = NO ] && output=FALSE;;
102 1) [ $info = NO ] && output=FALSE;;
103 2) [ $badconfig = NO ] && output=FALSE;;
104 esac
105 [ $output = TRUE ] && { cat $tmp_output; empty=FALSE; }
107 cp /dev/null $tmp_output
109 done
110 done
111 if [ $empty = TRUE ]
112 then
113 [ $processed = 1 ] && plural= || plural=s
114 echo "No output from the $processed file$plural processed"
115 else
116 if [ "$verbose" = YES ]
117 then
118 echo ""
119 echo "-- End of $arg output -- `date`"
122 } | eval $pipe
123 done
124 rm -f $tmp_output