What is the simplest/best way to ensure only one instance of a given script is running - assuming it's Bash on Linux?
At the moment I'm doing:
ps -C script.name.sh > /dev/null 2>&1 || ./script.name.sh
but it has several issues:
- it puts the check outside of script
- it doesn't let me run the same script from separate accounts - which I would like sometimes.
-C
checks only first 14 characters of process name
Of course, I can write my own pidfile handling, but I sense that there should be a simple way to do it.
If the script is the same across all users, you can use a
lockfile
approach. If you acquire the lock, proceed else show a message and exit.As an example:
After
/tmp/the.lock
has been acquired your script will be the only one with access to execution. When you are done, just remove the lock. In script form this might look like: