Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 30876 Details for
Bug 45155
run-crons and /var/spool/cron/lastrun/lock problems
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
better version with non-racy locking
run-crons (text/plain), 2.51 KB, created by
Aron Griffis (RETIRED)
on 2004-05-06 15:25:31 UTC
(
hide
)
Description:
better version with non-racy locking
Filename:
MIME Type:
Creator:
Aron Griffis (RETIRED)
Created:
2004-05-06 15:25:31 UTC
Size:
2.51 KB
patch
obsolete
>#!/bin/bash ># ># $Header: /home/cvsroot/gentoo-x86/sys-apps/cronbase/files/run-crons,v 1.9 2003/11/19 06:31:23 prez Exp $ ># ># ># 06 May 2004; Aron Griffis <agriffis@gentoo.org> run-crons: ># make the locking actually work. The old code was racy ># ># 23 Jun 2002; Jon Nelson <jnelson@gentoo.org> run-crons: ># fixed a race condition, where cron jobs and run-crons wanted to ># delete touch files ># ># 20 Apr 2002; Thilo Bangert <bangert@gentoo.org> run-crons: ># moved lastrun directory to /var/spool/cron/lastrun ># ># Author: Achim Gottinger <achim@gentoo.org> ># ># Mostly copied from SuSE ># ># this script looks into /etc/cron.[hourly|daily|weekly|monthly] ># for scripts to be executed. The info about last run is stored in ># /var/spool/cron/lastrun > >LOCKDIR=/var/spool/cron/lastrun >LOCKFILE=${LOCKDIR}/lock > >mkdir -p ${LOCKDIR} > ># Make sure we're not running multiple instances at once. ># Try twice to lock, otherwise give up. >for ((i = 0; i -lt 2; i = i + 1)); do > ln -sn $$ ${LOCKFILE} 2>/dev/null > if [[ $? != 0 ]]; then > # lock failed, check for a running process. > # handle both old- and new-style locking. > cronpid=$(readlink ${LOCKFILE} 2>/dev/null || > cat ${LOCKFILE} 2>/dev/null) > if [[ $? == 0 ]]; then > if kill -0 ${cronpid} 2>/dev/null; then > # whoa, another process is really running > exit 0 > else > rm -f ${LOCKFILE} > fi > fi > fi >done > ># Set a trap to remove the lockfile when we're finished >trap "rm -f ${LOCKFILE}" 0 1 2 3 15 > > >for BASE in hourly daily weekly monthly >do > CRONDIR=/etc/cron.${BASE} > > test -d $CRONDIR || continue > > if [ -e ${LOCKDIR}/cron.$BASE ] > then > case $BASE in > hourly) > #>= 1 hour, 5 min -=> +65 min > TIME="-cmin +65" ;; > daily) > #>= 1 day, 5 min -=> +1445 min > TIME="-cmin +1445" ;; > weekly) > #>= 1 week, 5 min -=> +10085 min > TIME="-cmin +10085" ;; > monthly) > #>= 31 days, 5 min -=> +44645 min > TIME="-cmin +44645" ;; > esac > find ${LOCKDIR} -name cron.$BASE $TIME -exec rm {} \; > fi > > # if there is no touch file, make one then run the scripts > if [ ! -e ${LOCKDIR}/cron.$BASE ] > then > touch ${LOCKDIR}/cron.$BASE > > set +e > for SCRIPT in $CRONDIR/* > do > if [[ -x $SCRIPT && ! -d $SCRIPT ]]; then > $SCRIPT > fi > done > fi >done > ># Clean out bogus cron.$BASE files with future times >touch ${LOCKDIR} >find ${LOCKDIR} -newer ${LOCKDIR} -exec /bin/rm -f {} \;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 45155
:
27641
|
27642
|
30876
|
30877