On Wed, Mar 22, 2006 at 10:15:40PM +0100, Ola Lundqvist wrote:
> Patch is welcome.

A first try is attached. This basically moves the lock that we already
use to a more global level, and work rudimenatarily. It is not well
tested though.

One thing I have not gotten right is message handling: The message
printed if /usr/bin/dotlockfile is not found seems to go nowhere if
the cron-apt run won't generate output otherwise. I have not yet
understood the message/log file handling with the createdivinfo stuff.
It is kind of underdocumented.

Greetings
Marc

-- 
-----------------------------------------------------------------------------
Marc Haber         | "I don't trust Computers. They | Mailadresse im Header
Mannheim, Germany  |  lose things."    Winona Ryder | Fon: *49 621 72739834
Nordisch by Nature |  How to make an American Quilt | Fax: *49 621 72739835
--- cron-apt    2006-04-29 15:32:33.424994750 +0200
+++ /usr/sbin/cron-apt  2006-04-29 15:53:24.551185250 +0200
@@ -270,6 +270,9 @@
     if [ -d "$TMPDIR" ] ; then
        rmdir "$TMPDIR"
     fi
+    if [ -x "/usr/bin/dotlockfile" ]; then
+        dotlockfile -u $LOCKFILE
+    fi
 }
 
 # Do the actual msg transfer. This reduce some duplications.
@@ -386,9 +389,26 @@
     exit 0
 fi
 
-############################### sleep #########################################
+################## try to take out a lock, terminate if unsuccessful ##########
 
 echo "CRON-APT RUN [$CONFIG]: $(date)" > $INITLOG
+if [ -x /usr/bin/dotlockfile ] ; then
+    if ! dotlockfile -l -p -r 10 $LOCKFILE; then
+        # create log entry
+        echo > $MAIL "cannot acquire cron-apt lock."
+       onexit
+       exit 1
+    fi
+else
+    if [ -z "$NOLOCKWARN" ]; then
+        echo >  $TEMP "WARNING: dotlockfile not installed. If you don't want 
to see this"
+        echo >> $TEMP "         Warning any more, set NOLOCKWARN in the 
configuration file."
+       createerrorinfo "startup"
+    fi
+fi
+
+############################### sleep #########################################
+
 if [ -n "$RUNSLEEP" ] ; then
     if [ $RUNSLEEP -gt 0 ] ; then
        if [ -z "$RANDOM" ] ; then
@@ -424,34 +444,14 @@
            grep -v "^[[:space:]]*$" | {
                while read LINE ; do
                    echo "CRON-APT LINE: $APTCOMMAND $LINE" > "$TEMP"
-                   if [ -x /usr/bin/dotlockfile ] ; then
-                       if ! dotlockfile -l -p -r 10 $LOCKFILE; then
-                           echo > $TEMP "cannot acquire apt lock."
-                           RET=1
-                       else
-                           UMASK_SAVE=$(umask)
-                           umask $UMASK_RELAXED
-                           $APTCOMMAND $OPTIONS $LINE >> $TEMP 2>&1
-                           RET=$?
-                           umask $UMASK_SAVE
-                       fi
-                       dotlockfile -u $LOCKFILE
-                   else
-                       if [ -z "$NOLOCKWARN" ]; then
-                           echo >  $TEMP "WARNING: dotlockfile not installed. 
If you don't want to see this"
-                           echo >> $TEMP "         Warning any more, set 
NOLOCKWARN in the configuration file."
-                       fi
-                       UMASK_SAVE=$(umask)
-                       umask $UMASK_RELAXED
-                       $APTCOMMAND $OPTIONS $LINE >> $TEMP 2>&1
-                       RET=$?
-                       umask $UMASK_SAVE
-                   fi
+                   UMASK_SAVE=$(umask)
+                   umask $UMASK_RELAXED
+                   $APTCOMMAND $OPTIONS $LINE >> $TEMP 2>&1
+                   RET=$?
+                   umask $UMASK_SAVE
                    if [ "$FILTERCTRLM" = "true" ]; then
                        CTRLM="$(echo -e \\r)"
                        < "$TEMP" sed "s/.*$CTRLM\(.\+\)/\1/" > "$FILTER"
-                       #grep -v "
-#" "$TEMP" > "$FILTER"
                        cp "$FILTER" "$TEMP"
                    fi
                    if [ $RET -ne 0 ]; then

Reply via email to