periodic(8): Add time stamps to log
[dragonfly.git] / usr.sbin / periodic / periodic.sh
CommitLineData
984263bc
MD
1#!/bin/sh -
2#
3# $FreeBSD: src/usr.sbin/periodic/periodic.sh,v 1.9.2.8 2002/05/21 03:09:35 brian Exp $
1de703da 4# $DragonFly: src/usr.sbin/periodic/periodic.sh,v 1.2 2003/06/17 04:29:59 dillon Exp $
984263bc
MD
5#
6# Run nightly periodic scripts
7#
8# usage: periodic { daily | weekly | monthly } - run standard periodic scripts
9# periodic /absolute/path/to/directory - run periodic scripts in dir
10#
11
12usage () {
13 echo "usage: $0 <directory of files to execute>" 1>&2
14 echo "or $0 { daily | weekly | monthly }" 1>&2
15 exit 1
16}
17
18if [ $# -lt 1 ] ; then
19 usage
20fi
21
22# If possible, check the global system configuration file,
23# to see if there are additional dirs to check
24if [ -r /etc/defaults/periodic.conf ]; then
25 . /etc/defaults/periodic.conf
26 source_periodic_confs
27fi
28
29host=`hostname`
30export host
31tmp_output=`mktemp ${TMPDIR:-/tmp}/periodic.XXXXXXXXXX`
32
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).
36
37for arg
38do
39 # Where's our output going ?
40 eval output=\$${arg##*/}_output
41 case "$output" in
42 /*) pipe="cat >>$output";;
43 "") pipe=cat;;
44 *) pipe="mail -s '$host ${arg##*/} run output' $output";;
45 esac
46
47 success=YES info=YES badconfig=NO # Defaults when ${run}_* aren't YES/NO
48 for var in success info badconfig
49 do
50 case $(eval echo "\$${arg##*/}_show_$var") in
51 [Yy][Ee][Ss]) eval $var=YES;;
52 [Nn][Oo]) eval $var=NO;;
53 esac
54 done
55
56 case $arg in
57 /*) if [ -d "$arg" ]
58 then
59 dirlist="$arg"
60 else
61 echo "$0: $arg not found" >&2
62 continue
63 fi;;
64 *) dirlist=
65 for top in /etc/periodic ${local_periodic}
66 do
67 [ -d $top/$arg ] && dirlist="$dirlist $top/$arg"
68 done;;
69 esac
70
71 {
72 empty=TRUE
73 processed=0
b61aeef8 74 echo "-- Start of $arg output -- `date`"
984263bc
MD
75 for dir in $dirlist
76 do
77 for file in $dir/*
78 do
79 if [ -x $file -a ! -d $file ]
80 then
81 output=TRUE
b61aeef8 82 echo "-- Start of $arg $file output -- `date`"
984263bc
MD
83 processed=$(($processed + 1))
84 $file </dev/null >$tmp_output 2>&1
85 rc=$?
86 if [ -s $tmp_output ]
87 then
88 case $rc in
89 0) [ $success = NO ] && output=FALSE;;
90 1) [ $info = NO ] && output=FALSE;;
91 2) [ $badconfig = NO ] && output=FALSE;;
92 esac
93 [ $output = TRUE ] && { cat $tmp_output; empty=FALSE; }
94 fi
95 cp /dev/null $tmp_output
96 fi
97 done
98 done
99 if [ $empty = TRUE ]
100 then
101 [ $processed = 1 ] && plural= || plural=s
102 echo "No output from the $processed file$plural processed"
103 else
104 echo ""
b61aeef8 105 echo "-- End of $arg output -- `date`"
984263bc
MD
106 fi
107 } | eval $pipe
108done
109rm -f $tmp_output