#!/usr/bin/env python import fcntl import os import sys import env import setproctitle import qnap.tunnelagent.bootstrap.server # set process name process_name = os.path.basename(__file__) setproctitle.setproctitle(process_name) if __name__ == '__main__': # check if already have other process lockfile = '/var/run/{}.pid.lck'.format(process_name) lockfd = open(lockfile, 'a+') try: fcntl.flock(lockfd.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) except IOError: sys.exit(0) # start process & remove pid file pidfile = '/var/run/{}.pid'.format(process_name) try: pidfd = open(pidfile, 'a+') pidfd.write('%d' % os.getpid()) pidfd.flush() sys.exit(qnap.tunnelagent.bootstrap.server.main()) finally: pidfd.close() fcntl.flock(lockfd.fileno(), fcntl.LOCK_UN) lockfd.close() os.unlink(pidfile) os.unlink(lockfile)