How can I detect whether an /etc/rc.d/init.d script is being run	at boot time versus by hand?
    Kevin D. Clark 
    kevin_d_clark at comcast.net
       
    Tue May 21 15:23:57 EDT 2013
    
    
  
Bill Freeman writes:
> I'm trying to figure out whether to force the removal of an almost
> certainly stale pid file or not in the service start case.
I'm not specifically answering your question here, but, here is some
code that I believe to be reasonable and related to the problem you
appear to be trying to solve.
Regards,
--kevin
#!/bin/bash
#
#  General functions
# 
function try_lock () {
    local tempfile="$1.$$"
    local lockfile="$1.lock"
    # do we have permission at all to write here?
    if ! echo $$ >$tempfile ; then
      echo "You do not have permission to access `dirname $tempfile`" 1>&2
      return 1
    fi
    # attempt to create the lockfile ; if successful return success
    if ln $tempfile $lockfile 2>/dev/null ; then
        rm -f $tempfile
        return 0
    fi
    # no success creating lockfile?  well, is there any current process
    # that is holding onto this lock?  if so, return (and thus:  wait)
    if kill -0 `cat $lockfile` 2>/dev/null ; then
        rm -f $tempfile
        return 1
    fi
    # if we are here the lockfile must be stale
    echo "Removing stale lock file: $lockfile"
    rm -f $lockfile
    if ln $tempfile $lockfile 2>/dev/null ; then
        rm -f $tempfile
        return 0
    fi
    rm -f $tempfile
    return 1
}
release_lock() {
    local lockfile="$1.lock"
    local tempfile="$1"
    rm -f "$lockfile" "$tempfile"
}
function get_lock() {
    local tempfile="$1"
    until try_lock $tempfile ; do
        echo waiting for the lock
        sleep 1
    done
}
....
#
#  Convenience functions for specific locks
#
function get_AAA_lock() {
    get_lock /var/run/AAA
}
function release_AAA_lock() {
    release_lock /var/run/AAA
}
function get_BBB_lock() {
    get_lock /some/other/path/BBB
}
function release_BBB_lock() {
    release_lock /some/other/path/BBB
}
..........
function do_something() {
   get_BBB_lock
   critical_section
   release_BBB_lock
}
-- 
GnuPG Fingerprint: D87F DAD6 0291 289C EB1E 781C 9BF8 A7D8 B280 F24E 
    
    
More information about the gnhlug-discuss
mailing list