Test if Script Already Running

Jon Ribbens jon+usenet at unequivocal.eu
Tue Apr 18 20:48:05 EDT 2017


On 2017-04-19, Matt <matt.mailinglists at gmail.com> wrote:
> I have a number of simple scripts I run with cron hourly on Centos
> linux.  I want the script to check first thing if its already running
> and if so exit.
>
> In perl I did it with this at the start of every script:
>
>     use Fcntl ':flock';
>     INIT {
>         open LH, $0 or die "Can't open $0 for locking!\nError: $!\n";
>         flock LH, LOCK_EX | LOCK_NB or die "$0 is already running somewhere!\n";
>     }
>
> How can I do something like this in Python?

I did exactly that very recently (well, I used a different file for
the lock rather than the script itself, but it could easily be
altered):

    import errno
    import fcntl
    import os
    import sys

    LOCKFILE = "...lock file name..."

    lockfd = os.open(LOCKFILE, os.O_WRONLY | os.O_CREAT)
    try:
      fcntl.flock(lockfd, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except IOError as exc:
      if exc[0] != errno.EAGAIN:
        raise
      sys.exit(0)


More information about the Python-list mailing list