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 _______________________________________________ gnhlug-discuss mailing list gnhlug-discuss@mail.gnhlug.org http://mail.gnhlug.org/mailman/listinfo/gnhlug-discuss/