To respond to the suggestions from RavinderSingh13
The problem with looking for a process of the right name is that someone could be editing a file of the same/similar name, or using more to browse the script. They will all get detected as an in-use condition.
It would be neater written as:-
... although I'm probably breaking all sorts of rules about back-ticks inside a test.
For a single use script, you could create a lock file in your code:-
It's not pretty, but it works in a clunky way.
You can add more to it to reduce the risk of someone else getting in between you checking and creating the lock file, but it's more complex and doesn't work if you switch user:-
To respond to the suggestions from RavinderSingh13
The problem with looking for a process of the right name is that someone could be editing a file of the same/similar name, or using more to browse the script. They will all get detected as an in-use condition.
It would be neater written as:-
... although I'm probably breaking all sorts of rules about back-ticks inside a test.
I hope that this helps
Robin
Liverpool/Blackburn
UK
I suppose it depends if an abort wants to leave it locked up for investigation though.
If not, and you want to leave the lock in place, you would need to share the detail of what to clean up so it can be dealt with promptly if you need to.
For a single use script, you could create a lock file in your code:-
It's not pretty, but it works in a clunky way.
I disagree. It does not work. As you yourself subsequently observed, there is a race condition between the file existence check and file creation (chacko193's suggestion is similarly afflicted).
Quote:
Originally Posted by rbatte1
You can add more to it to reduce the risk of someone else getting in between you checking and creating the lock file ...
Executing more instructions during a race, prolonging the interval during which the process is in a vulnerable state, is exactly what you want to avoid. That just complicates and multiplies unforeseen interactions. If a race cannot be eliminated (this one can), the best strategy is to reduce the window of opportunity as much as possible.
The correct solution requires an atomic operation (such as rename(2), mkdir(2), open(2) with O_CREAT|O_EXCL, etc) to eliminate the race completely.
A race-free solution: set -C is synonymous with set -o noclobber, and both are POSIX-compliant. If the file exists, with noclobber enabled, the > redirection fails with a non-zero exit status. The noclobber implementation does its best to avoid the race in this thread (using open(2) with O_CREAT|O_EXCL).
When lockfile exists, if it's desirable to silently discard the sh-generated error message, append 2>/dev/null after fi.
Regards,
Alister
Last edited by alister; 11-25-2013 at 04:43 PM..
Reason: Brevity
These 2 Users Gave Thanks to alister For This Post:
Hi,
I am new to perl and have a script to which i want to ensure that no matter how many ever times i execute the script it should execute only once per day. Cronjob is not a safe method as I want to built in capability inside the script. (1 Reply)
Hi All,
My requirement is i have a script A.sh .When a person A runs the script A.sh it should get locked and person B should not run the script.
i followed the below code
f_script_lock()
{
process=$1
user=`ps -ef | grep -i "$process" | grep -i 'ksh' | awk '{print $1;}'`
if ; then
... (1 Reply)
Hi All,
newbie here, is it possible to lock my second script? because my 1st script is still running.
Ex.
1st run : 1st script.sh --> running.....
2nd run : 1st script.sh --> lock because the script is still running..
i don't have any idea how to do it.
Please advise,
Thanks,... (1 Reply)
Hi all,
I have to test some user priviliges. The goal is to be sure that an unauthorized user can't restart some modules (ssh, mysql etc...).
I'm trying to automate it with a shell script but in same cases I got the syslog broadcast message.
Is there any way to simply get a return code... (3 Replies)
Hi,
I have a ksh shell script that accesses databases to drop and create tables and the script also creates text files.
This shell script is accessed thru a java application that i would like to turn multi-user, but the only way that i can do that is if I can figure out a way to lock the shell... (2 Replies)
I am trying to create a script that will take a very large, tab delimited file and then lock accounts.
File headers look like this
id desc server pass sudo lock
test Test user server01 67 no no
"Test user" is under the desc column
Basically if pass column is greater... (5 Replies)
Hello all,
If anyone has time, I have a few questions:
How do I do the following in Linux. We are using Red Hat and Oracle Enterprise Linux, which is based on Red Hat too.
1. How to lock the account after a few (like 3) invalid password attempts?
2. How do you lock a screen after 30... (1 Reply)
Hi,
My requirement is to service a process and below is the script which i wrote for that and works fine, I have kept it in a crontab and running this everyminute, how do I lock this if its already running and i dont want to open if its running and not completed yet.
The crontab need to run... (4 Replies)
how can I lock my keyboard while I'm away from the computer without using lock command. What other commands gives me the option to lock keyboard device?
thanks (7 Replies)