bin/run-mirrors: Run post scripts after mirror jobs.
[mirror-admin] / bin / run-mirrors
1 #! /bin/sh
2
3 set -e
4
5 ## Make sure we're running as the right user.
6 case $(id -un) in
7 mirror) ;;
8 *) exec userv -fstdin=/dev/null mirror run "$@";;
9 esac
10
11 ## Set up a plausible environment.
12 HOME=/var/lib/mirror-admin; export HOME; cd
13 MIRRORS=/mnt/mirrors; export MIRRORS
14 PATH=$HOME/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin:/usr/local/sbin
15 export PATH
16 umask 002
17
18 ## Make sure we're running with a lock file.
19 case "${MIRROR_LOCKED-nil}" in
20 nil) exec env MIRROR_LOCKED=t locking -f var/mirror.lock "$0" "$@" ;;
21 esac
22
23 ## Hack for mad Kerberized NFS.
24 if [ -r etc/krb5.keytab ]; then
25 kinit -k -t etc/krb5.keytab mirror
26 fi
27
28 ## Before we start, rotate the logs. (Doing things this way means that we
29 ## can be sure we don't lose new logs, even if the log rotation goes
30 ## completely mental.
31 logrotate -s var/logrotate.state etc/logrotate.conf
32
33 ## Let SIGINT take out the children only.
34 trap "" INT
35
36 ## By default run all of the scripts.
37 case $# in 0) set "*" ;; esac
38
39 ## Now do the various mirroring things.
40 for file in $(run-parts --list etc/mirrors.d); do
41 [ -x "$file" ] || continue
42
43 matchp=nil
44 leaf=$(echo "$file" | sed 's:^.*/::; s/^[0-9]\+[-_.]//')
45 for pat in "$@"; do
46 case "$leaf" in $pat) matchp=t; break ;; esac
47 done
48 case $matchp in nil) continue ;; esac
49
50 base=${file##*/}; base=${base#[0-9]*-}
51 (
52 echo
53 echo "***--------------------------------------------------"
54 echo "*** Running $base at $(date +%Y-%m-%dT%H:%M:%S)"
55 echo
56 set +e; (trap - INT; exec "$file"); rc=$?; set -e
57 echo
58 echo "*** Finished $(date +%Y-%m-%dT%H:%M:%S); rc = $rc"
59 if [ -d etc/post-$base.d ]; then
60 for i in $(run-parts --list etc/post-$base.d); do
61 s=${i##*/}
62 echo
63 echo "*** Running post-script $s at $(date +%Y-%m-%dT%H:%M:%S)"
64 set +e; (trap - INT; exec "$i"); rc=$?; set -e
65 echo
66 echo "*** Finished post-script $s $(date +%Y-%m-%dT%H:%M:%S); rc = $rc"
67 done
68 fi
69 ) >>log/$base.log 2>&1
70 done