[RndTbl] race conditions?
Gilles Detillieux
grdetil at scrc.umanitoba.ca
Thu Jul 12 21:48:59 CDT 2012
Agree about the lock file to prevent race conditions.
I think you'll also run into problems when M reaches 10, because ls -1r
won't sort numerically when the number of digits varies. You'd need to
either stick to to single digits for the version number, or pipe the ls
output to "sort -t. -k 3nr" to get a proper reverse numeric sort.
Otherwise the rotation order will get really messed up.
On 12/07/2012 9:04 PM, Sean Walberg wrote:
> I'd use a lock file just to be safe. Depending on how "restart-daemon"
> works you might end up with a race condition inside there, resulting
> in no daemon getting run until the next pass.
>
> The easiest way would be
>
> lock="/var/run/mylock"
> if [ -f $lock ]; then exit 1; else touch $lock; fi
> #do your magic
> rm $lock
>
> There are other utilities like flock and lockfile if you are really
> concerned about re-entrancy, and depending on the user you run this
> script as, you may want to put $lock out of a normal user's reach. But
> to protect something running from cron, this will be more than enough.
>
> Sean
>
> On Thu, Jul 12, 2012 at 7:59 PM, Adam Thompson <athompso at dmts.biz
> <mailto:athompso at dmts.biz>> wrote:
>
> I just wrote the following snippet to quickly rotate some log
> files. I know this runs without bound, that's acceptable and
> desirable in this case. What I'm worried about is creating race
> conditions if this gets run from cron every minute...
>
> ###check if daemon has died###
> if daemon-is-dead; then
> L=mydaemon.log
> shopt -u failglob
> for i in $( ls -1r ${L}.[0-9]* 2>/dev/null ); do
> N=${i#$L.}
> M=$(( ${N} + 1 ))
> mv -n $i "${L}.${M}"
> done
> if [ -f ${L} ] ; then mv -n ${L} ${L}.1; fi
> restart-daemon
> fi
>
> Am I shooting myself in the foot here? The obvious race condition
> is if two copies run simultaneously, but this is only for
> temporary debugging purposes. If necessary, I'll change the cron
> job from every minute to every five minutes. Even then, the '-n'
> option to GNU mv should protect me...?
> Does anyone have a safer way to do this sort of thing manually? I
> don't want this logfile managed by logrotate(8).
>
> -Adam Thompson
> DMTS (Contractor)
> athompso at dmts.biz <mailto:athompso at dmts.biz>
> (204) 291-7950 <tel:%28204%29%20291-7950> - direct
> (204) 489-6515 <tel:%28204%29%20489-6515> - fax
>
>
> _______________________________________________
> Roundtable mailing list
> Roundtable at muug.mb.ca <mailto:Roundtable at muug.mb.ca>
> http://www.muug.mb.ca/mailman/listinfo/roundtable
>
>
>
>
> --
> Sean Walberg <sean at ertw.com <mailto:sean at ertw.com>> http://ertw.com/
>
>
> _______________________________________________
> Roundtable mailing list
> Roundtable at muug.mb.ca
> http://www.muug.mb.ca/mailman/listinfo/roundtable
--
Gilles R. Detillieux E-mail: <grdetil at scrc.umanitoba.ca>
Spinal Cord Research Centre WWW: http://www.scrc.umanitoba.ca/
Dept. Physiology, U. of Manitoba Winnipeg, MB R3E 0J9 (Canada)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.muug.mb.ca/pipermail/roundtable/attachments/20120712/d8d9211d/attachment-0001.html>
More information about the Roundtable
mailing list