Sponsored Content
Top Forums Shell Programming and Scripting Use of flock command for whole script Post 302982536 by Don Cragun on Thursday 29th of September 2016 03:47:37 PM
Old 09-29-2016
As long as you just have a single script that wants to be sure that only one copy of it is running at a time, you can use the shell's no clobber option to create a lock file something like:
Code:
#!/bin/bash
IAm=${0##*/}
LockFile="/tmp/$IAm.lock"

# Set lock and verify that no other copy of this code is already running...
set -C	# set no clobber option

# Create the lock file...  This will fail if the lock file already exists.
if ! echo "PID $$ holds the lock." > "$LockFile"
then	echo "$IAm: Another $IAm is already running." >&2
	cat "$LockFile" >&2
	echo "$IAm: Aborting!" >&2
	exit 1
fi

# We now hold an exclusive lock to the lock file (as long as other processes
# wanting to create this lock file also use set -C when trying to create this
# lock file).
set +C	# clear no clobber option

# Set up to remove the lock file when we're done.
trap 'rm -f "$LockFile"' EXIT

echo "$IAm: $$ running."
sleep 60
echo "$IAm: $$ quitting."

This should work with any POSIX conforming shell.

Just be aware that if you use kill -9 to kill this script, you'll have to manually remove the lock file before you can start another instance of this script.
These 2 Users Gave Thanks to Don Cragun For This Post:
 

7 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

can anyone help with shell script command about searching word with grep command?

i want to search in the current directory all the files that contain one word for example "hello" i want to achieve it with the grep command but not with the grep * (2 Replies)
Discussion started by: aintour
2 Replies

2. Shell Programming and Scripting

Need help! command working ok when executed in command line, but fails when run inside a script!

Hi everyone, when executing this command in unix: echo "WM7 Fatal Alerts:", $(cat query1.txt) > a.csvIt works fine, but running this command in a shell script gives an error saying that there's a syntax error. here is content of my script: tdbsrvr$ vi hc.sh "hc.sh" 22 lines, 509... (4 Replies)
Discussion started by: 4dirk1
4 Replies

3. Shell Programming and Scripting

SH script, variable built command fails, but works at command line

I am working with a sh script on a solaris 9 zone (sol 10 host) that grabs information to build the configuration command line. the variables Build64, SSLopt, CONFIGopt, and CC are populated in the script. the script includes CC=`which gcc` CONFIGopt=' --prefix=/ --exec-prefix=/usr... (8 Replies)
Discussion started by: oly_r
8 Replies

4. UNIX for Advanced & Expert Users

Semaphore - lockfile/flock

Hi, I have a process which can run one instance at a time. Currently we have multiple scripts trying to kickoff this process. I wanted to implement the semaphore mechanism to achieve this. I was going through few examples. The below code seems to be reasonable solution. ... (5 Replies)
Discussion started by: tostay2003
5 Replies

5. Shell Programming and Scripting

Help using Flock (file lock)

Hello, I have been working on using "flock"/file lock to prevent two instances of a bash script from being executed. Below is a simplified version of what I have to illustrate the flock part. It works as it is set up there below however the piece I am trying to figure out is how to get it to... (2 Replies)
Discussion started by: infrared013
2 Replies

6. Shell Programming and Scripting

Flock preventing function to work

Hi i have a script that check pings and i use flock to so the script wont run multipul times : its not the whole script but this is the idea : ( flock -x -w 3 200 || exit 1 /usr/sbin/fping -c$count -i$interval -a $hosts > $FILE1 2>&1 ) 200>/var/lock/.myscript.exclusivelock now i... (4 Replies)
Discussion started by: batchenr
4 Replies

7. Shell Programming and Scripting

Execute ssh command with additional terminal command to any remote user not working script

Hello i am having an issue with bash script and this is the code now=$(cat hosts1.txt | awk '{print $2;}') while read n ;do ssh root@$now 'useradd test1; echo -e "test1\ntest1" | passwd test1 && echo "test1 ALL=(ALL:ALL) ALL" >> /etc/sudoers' When i execute only part with cat, it... (8 Replies)
Discussion started by: tomislav91
8 Replies
All times are GMT -4. The time now is 06:05 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy