Skip to content

Latest commit

 

History

History
88 lines (58 loc) · 1.69 KB

README.md

File metadata and controls

88 lines (58 loc) · 1.69 KB

bashlock Locking Function for bash

Build Status

This includes both a bash function and Python class that implements exclusive locking via a filesystem file.

This is used to prevent multiple instances of a script from running at the same time.

Features

  • Uses trap to remove a lockfile on exit of script. This is one big advantage over using "lockfile(1)" within the script.

  • Writes PID to lockfile and detects if locked process has exited.

  • Provides atomic semantics via "ln"/os.link().

  • Unit tests.

Getting Started

Copy the "bashlock" function into your code and then call it with a lockfile name, exit on failure:

Bash:

bashlock /var/run/${0##*/}.pid || exit 1

# [Remainder of script code here]

or using an environment variable:

BASHLOCKFILE=/var/run/${0##*/}.pid
bashlock || exit 1

# [Remainder of script code here]

Python:

from bashlock import Bashlock
if not Bashlock('/tmp/locktest').acquire():
    print('Unable to obtain lock')
    sys.exit(1)

# [Remainder of code here]

Done!

Running Tests

To run the tests:

bash tests/bashtest
python3 -m pytest tests/*.py

Bash Function Exit Codes

The following exit codes are used:

* 0: Lock successfully obtained

* 1: Lock is held by another process

* 2: Usage error

* 3: Failed to write temporary lockfile

Contact Information

Author: Sean Reifschneider [email protected]
Date: Wed Sep 18, 2013
License: 2-Clause BSD
Code/Bugs: https://github.com/realgo/bashlock