summaryrefslogtreecommitdiffstats
path: root/source/a/dcron/run-parts
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2022-08-05 21:04:39 +0000
committer Eric Hameleers <alien@slackware.com>2022-08-06 07:00:16 +0200
commit6882ad89994efcb555332d32b9a76282e37018e3 (patch)
tree21159e2be99bbcab50c85b03bac93b5de44f448e /source/a/dcron/run-parts
parentca27dc818b992f6deccc946ad7cae6b6e3b626cd (diff)
downloadcurrent-6882ad89994efcb555332d32b9a76282e37018e3.tar.gz
current-6882ad89994efcb555332d32b9a76282e37018e3.tar.xz
Fri Aug 5 21:04:39 UTC 202220220805210439
a/dcron-4.5-x86_64-12.txz: Rebuilt. Rebase the run-parts script on the latest version from Fedora's crontabs package. Thanks to avian. a/elilo-3.16-x86_64-13.txz: Rebuilt. Patched to disable the Confidential Computing blob for SEV-SNP, which fixes booting a 5.19 kernel with the EFI stub enabled. If you use elilo, be sure to either run eliloconfig again or manually copy (and rename) the proper elilo binary to your EFI System Partition. Thanks to PiterPunk. a/sysklogd-2.4.2-x86_64-1.txz: Upgraded. ap/most-5.2.0-x86_64-1.txz: Upgraded. d/cmake-3.24.0-x86_64-1.txz: Upgraded. x/ibus-table-1.16.10-x86_64-1.txz: Upgraded. extra/brltty/brltty-6.5-x86_64-1.txz: Upgraded. extra/php80/php80-8.0.22-x86_64-1.txz: Upgraded.
Diffstat (limited to 'source/a/dcron/run-parts')
-rw-r--r--source/a/dcron/run-parts120
1 files changed, 87 insertions, 33 deletions
diff --git a/source/a/dcron/run-parts b/source/a/dcron/run-parts
index 65c778f36..c12ee3536 100644
--- a/source/a/dcron/run-parts
+++ b/source/a/dcron/run-parts
@@ -1,46 +1,100 @@
-#!/bin/sh
-# run-parts: Runs all the scripts found in a directory.
+#!/bin/bash
+# run-parts - concept taken from Debian
# keep going when something fails
set +e
if [ $# -lt 1 ]; then
- echo "Usage: run-parts <directory>"
- exit 1
+ 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"
- echo "Usage: run-parts <directory>"
- exit 1
+ echo "Not a directory: $1"
+ exit 1
+fi
+
+if [ -f /etc/default/run-parts ]; then
+ . /etc/default/run-parts
fi
-# There are several types of files that we would like to
-# ignore automatically, as they are likely to be backups
-# of other scripts:
-IGNORE_SUFFIXES="~ ^ , .bak .new .rpmsave .rpmorig .rpmnew .swp"
-
-# Main loop:
-for SCRIPT in $1/* ; do
- # If this is not a regular file, skip it:
- if [ ! -f $SCRIPT ]; then
- continue
- fi
- # Determine if this file should be skipped by suffix:
- SKIP=false
- for SUFFIX in $IGNORE_SUFFIXES ; do
- if [ ! "$(basename $SCRIPT $SUFFIX)" = "$(basename $SCRIPT)" ]; then
- SKIP=true
- break
- fi
- done
- if [ "$SKIP" = "true" ]; then
- continue
- fi
- # If we've made it this far, then run the script if it's executable:
- if [ -x $SCRIPT ]; then
- $SCRIPT || echo "$SCRIPT failed."
- 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