runif for lockutil

This commit is contained in:
2023-09-08 08:37:10 +03:00
parent a189d6dc6f
commit a21d62dfce

View File

@@ -1,83 +1,98 @@
#!/bin/bash #!/bin/bash
VERSION=230908.0
_help() { _help() {
echo ' echo '
Usage: lock-util {lock-file} [-v] [command] [args] Usage: lock-util {lock-file} [-v] [command] [args]
Commands: Commands:
create create
exist ( return 0 if lock exists ) exist ( return 0 if lock exists )
old [age in seconds] ( return 0 if file younger than [args] seconds or file not present ) old [age in seconds] ( return 0 if file older than [args] seconds or file not present )
runif [age in seconds] ( old + create, if file not exist, or older than [arg], then touch file and return 0, else 1 )
remove remove
-v as first argument sets very verbose mode -v as first argument sets very verbose mode
' '
} }
LOCKFILE="$1" LOCKFILE="$1"
[[ "$2" = "-v" ]] && { [[ "$2" = "-v" ]] && {
VERBOSE=on VERBOSE=on
COMMAND="$3" COMMAND="$3"
ARG="$4" ARG="$4"
} || { } || {
COMMAND="$2" COMMAND="$2"
ARG="$3" ARG="$3"
} }
BOXES=cat BOXES=cat
which boxes &>/dev/null && BOXES="boxes -d shell" which boxes &>/dev/null && BOXES="boxes -d shell"
_create() { _create() {
LOCKDIR=$( dirname "$LOCKFILE" ) LOCKDIR=$( dirname "$LOCKFILE" )
mkdir -p "$LOCKDIR" mkdir -p "$LOCKDIR"
touch "$LOCKFILE" touch "$LOCKFILE"
} }
_exist() { _exist() {
test -f "$LOCKFILE" test -f "$LOCKFILE"
} }
_remove() { _remove() {
rm "$LOCKFILE" rm "$LOCKFILE"
} }
[[ $COMMAND = "create" ]] && { [[ $COMMAND = "create" ]] && {
_exist && { _exist && {
[[ "$VERBOSE" = "on" ]] && echo "LOCK FILE EXISTS" | $BOXES [[ "$VERBOSE" = "on" ]] && echo "LOCK FILE EXISTS" | $BOXES
exit 1 exit 1
} }
_create _create
ec=$? ec=$?
[[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE CREATED" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE CREATED" | $BOXES
[[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "UNABLE TO CREATE LOCK FILE" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "UNABLE TO CREATE LOCK FILE" | $BOXES
exit $ec exit $ec
} }
[[ $COMMAND = "exist" ]] && { [[ $COMMAND = "exist" ]] && {
_exist _exist
ec=$? ec=$?
[[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE EXISTS" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE EXISTS" | $BOXES
[[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "LOCK FILE DOES NOT EXIST" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "LOCK FILE DOES NOT EXIST" | $BOXES
exit $ec exit $ec
} }
[[ $COMMAND = "old" ]] && { [[ $COMMAND = "old" ]] && {
_exist || { _exist || {
[[ "$VERBOSE" = "on" ]] && echo "LOCK FILE MISSING" | $BOXES [[ "$VERBOSE" = "on" ]] && echo "LOCK FILE MISSING" | $BOXES
exit 0 exit 0
} }
[[ -z "$ARG" ]] && _help && echo "MISSING ARGUMENT" | $BOXES && exit 1 [[ -z "$ARG" ]] && _help && echo "MISSING ARGUMENT" | $BOXES && exit 1
created=$( stat -c %Y "$LOCKFILE" ) created=$( stat -c %Y "$LOCKFILE" )
now=$( date +%s ) now=$( date +%s )
age=$(( $now - $created )) age=$(( $now - $created ))
test $ARG -lt $age test $ARG -lt $age
ec=$? ec=$?
[[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE OLDER THAN $ARG s" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE OLDER THAN $ARG s" | $BOXES
[[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "LOCK FILE YOUNGER THAN $ARG s" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "LOCK FILE YOUNGER THAN $ARG s" | $BOXES
exit $ec exit $ec
} }
[[ $COMMAND = "remove" ]] && { [[ $COMMAND = "remove" ]] && {
_remove _remove
ec=$?
[[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE REMOVED" | $BOXES
[[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "UNABLE TO REMOVE LOCK FILE" | $BOXES
exit $ec
}
[[ $COMMAND = "runif" ]] && {
[[ -z "$ARG" ]] && _help && echo "MISSING ARGUMENT" | $BOXES && exit 1
VERBOSE=$VERBOSE "$0" "$LOCKFILE" old "$ARG"
ec=$?
[[ $ec -eq 0 ]] && {
_exist && _remove
VERBOSE=$VERBOSE "$0" "$LOCKFILE" create
ec=$? ec=$?
[[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE REMOVED" | $BOXES }
[[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "UNABLE TO REMOVE LOCK FILE" | $BOXES exit $ec
exit $ec
} }
echo Command not recognized echo Command not recognized