58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os
 | 
						|
import subprocess
 | 
						|
import time
 | 
						|
 | 
						|
import seiscomp.kernel
 | 
						|
 | 
						|
 | 
						|
class Module(seiscomp.kernel.Module):
 | 
						|
    def __init__(self, env):
 | 
						|
        super().__init__(env, env.moduleName(__file__))
 | 
						|
 | 
						|
    def supportsAliases(self):
 | 
						|
        # The default handler does not support aliases
 | 
						|
        return True
 | 
						|
 | 
						|
    def reload(self):
 | 
						|
        if not self.isRunning():
 | 
						|
            self.env.log(f"{self.name} is not running")
 | 
						|
            return 1
 | 
						|
 | 
						|
        self.env.log(f"reloading {self.name}")
 | 
						|
 | 
						|
        lockfile = self.env.lockFile(self.name)
 | 
						|
        reloadfile = os.path.join(os.path.dirname(lockfile), f"{self.name}.reload")
 | 
						|
 | 
						|
        # Open pid file
 | 
						|
        with open(lockfile, "r", encoding="utf-8") as f:
 | 
						|
            # Try to read the pid
 | 
						|
            pid = int(f.readline())
 | 
						|
 | 
						|
            # touch reload file
 | 
						|
            with open(reloadfile, "a", encoding="utf-8") as _:
 | 
						|
                pass
 | 
						|
 | 
						|
            if not os.path.isfile(reloadfile):
 | 
						|
                self.env.log(f"could not touch reload file: {reloadfile}")
 | 
						|
                return 1
 | 
						|
 | 
						|
            # Send SIGHUP
 | 
						|
            subprocess.call(f"kill -s HUP {pid}", shell=True)
 | 
						|
 | 
						|
            # wait for reload file to disappear
 | 
						|
            for _ in range(0, int(self.reloadTimeout * 5)):
 | 
						|
                time.sleep(0.2)
 | 
						|
                if not os.path.isfile(reloadfile):
 | 
						|
                    return 0
 | 
						|
 | 
						|
            self.env.log("timeout exceeded")
 | 
						|
 | 
						|
        return 1
 | 
						|
 | 
						|
 | 
						|
# Uncomment for authbind (running service on privileged ports)
 | 
						|
#  def _run(self):
 | 
						|
#    params = "--depth 2 " + self.env.binaryFile(self.name) + " " + self._get_start_params()
 | 
						|
#    binaryPath = "authbind"
 | 
						|
#    return self.env.start(self.name, binaryPath, params)
 |