diff options
| -rw-r--r-- | monitor_unified.py | 38 | 
1 files changed, 38 insertions, 0 deletions
| diff --git a/monitor_unified.py b/monitor_unified.py index e68c1f4..0ce8133 100644 --- a/monitor_unified.py +++ b/monitor_unified.py @@ -11,6 +11,8 @@ __email__ = "uinarf@autistici.org"  Program intended to be run as daemon reading from sensors and  writing to database.  """ +import signal +import psutil #optional  import sys, os, glob, re  from time import strftime, localtime, sleep @@ -490,6 +492,42 @@ class Rain(Sensor):  #    GPIO.add_event_detect(self.pin, GPIO.FALLING, callback=self.read(),  #    bouncetime=300) +def clean_exit(sig,frame): +    #do some other cleanup if you want +    os.remove('/var/run/user/[your uid]/RPGH_starter.pid') +    os.exit(0) + +def start(): +    signal.signal(signal.SIGTERM, clean_exit)#from start-stop-daemon +    signal.signal(signal.SIGINT, clean_exit)#from ctrl-c +    with open('/var/run/user/[your uid]/RPGH_starter.pid', 'x') as pid_file: +        pid_file.write(str(os.getpid())) +    do_main_loop() + +def main(): +    try: action=sys.argv[1] +    except IndexError: action='stop' +    if action=='start': +        start() +    elif action=='start_fork': +        if os.fork():sys.exit(0) +        start() +    elif action=='stop' +        with open('/var/run/user/[your uid]/RPGH_starter.pid', r') as pid_file: +            pid=int(pid_file.read()) +        os.kill(pid,signal.SIGTERM) + +        #optional clean up +        try: +             child=psutil.Process(pid) +        except FileNotFoundError:#psutil didn't find the pid dir in /proc +             sys.exit() +        try: +            child.wait(timeout=10) +        except psutil.TimeoutExpired:#we didn't exit/clean up in time +            child.kill() +            os.remove('/var/run/user/[your uid]/RPGH_starter.pid') +  if __name__ == '__main__':      fq = cfg.getint('hardware_settings', 'read_frequency')      print("Instantiating gpio connection") | 
