How to check if the script is already running?

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How to check if the script is already running?
# 1  
Old 01-30-2017
How to check if the script is already running?

I have one shell script in NAS shared location. Since NAS is mounted in many servers, script can be run from any of those servers.

I want to make sure if the script is already running, it should not allow others to run it. I googled it and got some idea that i can touch one empty file in the beginning of script and remove it at the end of script and look for that file existence to find if the script is already running.

But in my case, It wont work sometimes. Because my script will run for around 10 mins. Suppose if i cancel (CTRL+C) the script in middle when it is running, it will cancel the execution and it is leaving the file (touched at beginning) which i created in script beginning.

Please help me how can i achieve it. i.e, if the script is already running, it should not allow to execute again and it should echo some warning.

for eg; script file name: report.sh
# 2  
Old 01-30-2017
You can build a trap into your script, so that when you press control-C or control-\ or kill the script, the file will be removed.. If you put this at the beginning of your script:

Code:
trap "rm -f somefile; exit" SIGINT SIGTERM SIGQUIT

This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 01-30-2017
Thanks Scrutinizer..

But sometimes few persons are giving CTRL + Z to run it in background and they are forgetting to let it run in bg. At that time if another person run the same script again means i am not getting the desired output from the script as both the script execution will write in same output file.

So by considering this and bcoz of some other reason, i decided to place the file on server local filesystem and can be run from that server only. i know grep is not suitable one here as if i use 'ps|grep report.sh' command it ll fetch other occurrences as well (i.e less report.sh, vi report.sh, etc). In this case can i use any other ways to check if the script is already running.

Last edited by thomasraj87; 01-30-2017 at 05:06 PM..
# 4  
Old 01-30-2017
But, why are they both writing to the same file? If you could just change that, you wouldn't have to worry about it.

I often use /tmp/$$ as a temp file, the process' PID number. There will only be one process with a particular PID at any given time. If you want a less predictable name for security reasons, see 'mktemp'.
# 5  
Old 01-30-2017
alternatevely you could use lsof or fuser (depending on you OS) supplying the names of your script/binary and script around the output - that what I usually use.
E.g.:
Code:
lsof -t -c nameOfScript

# 6  
Old 01-31-2017
@vgersh99, Will it kill the existing process that were running the script already?

@Corona688, According to my script i have to redirect the various output to different files, so i have given the logfiles name explicitly. I will consider to use $$ PID in my logfiles.
# 7  
Old 01-31-2017
Let me see if I understand the request correctly: You have a NAS mounted on a number of servers sharing a shell script on that NAS. Only one single server is allowed to run one instance of the script at a given point in time, all others should be locked out during that run. The result is server dependent and should be stored locally on the respective server.
As it is many servers, local lock mecanisms won't work. Unless the OS offers lock mechanisms across all servers, you have to create one on your own.
Reading through your posts, I'm not sure if you differentiate between the lock file and the result file. You need both of them. While you can store the results locally, you should create the lock file some place available to all servers. One example - not being everybody's preferred choice - would be the script's path on the NAS, or e.g. a "lock" directory thereunder. You could use a simple file name, or a "personalized" one as Corona688 proposed, and use Scrutinizer's trap to remove it at script exit - not forgetting for the "normal", healthy script end.
No running scripts should be killed by the mechanism, but the nth instance should quit graciously when it sees another instance running, possibly logging such event when quitting.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Check to see if script is already running

Happy New Year Is there a quick way to check to see if a script is already running. I want to put in a check in the script to exit, if already running. Currerntly i can only think of doing it the following way. # ps -ef | grep -i 3_HOUSEKEEPING_FFTVTL_TO_FFTDSSU_DUPLICATION.ksh |... (5 Replies)
Discussion started by: Junes
5 Replies

2. Linux

Check up the status of a Script (running or not)

Hello, i allready search on google und here in the local Forum, but can't found something. I need a query in php, that check whether a process (script) is running or not. Like this: php query: /usr/bin/Script01 >> if runnig, then: "Script01 is Online", if not "Script01 is Offline" I... (2 Replies)
Discussion started by: ProTechEx
2 Replies

3. UNIX for Dummies Questions & Answers

[Solved] How to Check if a script is running?

Hi All, I am new to Unix... Can you please let me know how we can check if a script is running or not on Solaris box? (4 Replies)
Discussion started by: Rahul466
4 Replies

4. Shell Programming and Scripting

Script to check running of process

Hi, Can anyone please tell me how to write a shell script to check whether a process if running or not.... if its still running then wait for sometime and if not then run the next query. Also, Under my one main script main.sh I have to run 2 scripts simutaneously which take some time to... (2 Replies)
Discussion started by: lovepujain
2 Replies

5. UNIX for Dummies Questions & Answers

Help Running a Check in Bash Script

Hey guys, so I wrote a small script that pretty much just takes in two numbers and counts from the first to the second, e.g. unknown-hacker|544> count.sh 1 3 1 2 3 My problem is I want to make it so that if you input invalid parameters, such as non-numerical characters, more than 2... (2 Replies)
Discussion started by: Duo11
2 Replies

6. Shell Programming and Scripting

script to check if another script is running and if so, then sleep for sometime and check again

Hi, I am a unix newbie. I need to write a script to check wheteher another script is still running. If it is, then sleep for 30m and then check again if the script is running. If the script has stopped running then, I need to come out of the loop. I am using RHEL 5.2 (2 Replies)
Discussion started by: mathews
2 Replies

7. UNIX for Dummies Questions & Answers

check user id before running script

I am looking for the syntax to check which ID is executing script.sh. If the the ID, is not user1 then I want the script to exit and return to command prompt, if it is user1, then I want the script to continue. Any help would be greatly appreciate. Thank you. Chris (3 Replies)
Discussion started by: cpolikowsky
3 Replies

8. Shell Programming and Scripting

Running a check platform script

Hi, I want to run a check platform & application script under ksh (Soaris boxes). It runs some commands and it take some time. I want to customize it like that: - output is too big, hence I want some output of the commands to be redirect ed in an output file (or maybe two or three) - not... (4 Replies)
Discussion started by: heartwork
4 Replies

9. Shell Programming and Scripting

Check if trigger Script is running

HI, I have a script which will be running all the time...it is like a trigger.. wakesup every 10 minutes(trigger.sh) executes, and I want to write another script which monitors this script every one hour and if it finds that trigger script is not running it should start it and exit...and here... (9 Replies)
Discussion started by: mgirinath
9 Replies

10. Shell Programming and Scripting

check that script is not running twice

using ps -ef | fgrep "ld_data" how do i write a script to check that it didn't already run Thanks (2 Replies)
Discussion started by: Link_02
2 Replies
Login or Register to Ask a Question