#!/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] " 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 | sed '1i\ '"$i"':\ ' logger -p cron.notice -t "run-parts[$$]" "($1) finished $(basename $i)" fi fi done exit 0