From a22487f8cede2a9eb0409e26186ad552064013fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20Ba=C5=9Faran?= Date: Thu, 25 Feb 2016 17:24:07 +0200 Subject: [PATCH] bugifix --- etc/ahenk/log.conf | 2 +- opt/ahenk/ahenkd.py | 16 +- opt/ahenk/base/deamon/BaseDeamon.py | 260 ++++++++++++++------------- opt/ahenk/base/logger/AhenkLogger.py | 12 +- 4 files changed, 147 insertions(+), 143 deletions(-) diff --git a/etc/ahenk/log.conf b/etc/ahenk/log.conf index 8ec9d52..e9ef34d 100644 --- a/etc/ahenk/log.conf +++ b/etc/ahenk/log.conf @@ -10,7 +10,7 @@ keys=file [handler_file] class=logging.FileHandler -level=ERROR +level=INFO formatter=default args=("/var/log/ahenk.log", "w") diff --git a/opt/ahenk/ahenkd.py b/opt/ahenk/ahenkd.py index e150853..17faa99 100644 --- a/opt/ahenk/ahenkd.py +++ b/opt/ahenk/ahenkd.py @@ -3,17 +3,18 @@ # Author: İsmail BAŞARAN from base.config.ConfigManager import ConfigManager -from base.deamon.BaseDeamon import BaseDeamon -from base.logging.AhenkLogger import Logger +from base.deamon.BaseDeamon import BaseDaemon +from base.logger.AhenkLogger import Logger from base.Scope import Scope #from base.messaging.Messaging import Messaging import sys,logging -class AhenkDeamon(BaseDeamon): +class AhenkDeamon(BaseDaemon): """docstring for AhenkDeamon""" def run(self): + print "merhaba dunya" globalscope = Scope() globalscope.setInstance(globalscope) @@ -34,17 +35,18 @@ if __name__ == '__main__': pidfilePath='/var/run/ahenk.pid' - ahenkdeamon = AhenkDeamon(pidfilePath) + ahenkdaemon = AhenkDeamon(pidfilePath) print sys.argv if len(sys.argv) == 2: if sys.argv[1] == "start": print "starting" - ahenkdeamon.start() + ahenkdaemon.start() + print ahenkdaemon.get_pid() elif sys.argv[1] == 'stop': - ahenkdeamon.stop() + ahenkdaemon.stop() elif sys.argv[1] == 'restart': - ahenkdeamon.restart() + ahenkdaemon.restart() elif sys.argv[1] == 'status': # print status pass diff --git a/opt/ahenk/base/deamon/BaseDeamon.py b/opt/ahenk/base/deamon/BaseDeamon.py index 1e25353..38af4ba 100644 --- a/opt/ahenk/base/deamon/BaseDeamon.py +++ b/opt/ahenk/base/deamon/BaseDeamon.py @@ -1,129 +1,137 @@ #!/usr/bin/env python - import sys, os, time, atexit from signal import SIGTERM - -class BaseDeamon: - """ - A generic daemon class. - - Usage: subclass the Daemon class and override the run() method - """ - def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): - self.stdin = stdin - self.stdout = stdout - self.stderr = stderr - self.pidfile = pidfile - - def daemonize(self): - """ - do the UNIX double-fork magic, see Stevens' "Advanced - Programming in the UNIX Environment" for details (ISBN 0201563177) - http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 - """ - try: - pid = os.fork() - if pid > 0: - # exit first parent - sys.exit(0) - except OSError, e: - sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) - sys.exit(1) - - # decouple from parent environment - os.chdir("/") - os.setsid() - os.umask(0) - - # do second fork - try: - pid = os.fork() - if pid > 0: - # exit from second parent - sys.exit(0) - except OSError, e: - sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) - sys.exit(1) - - # redirect standard file descriptors - sys.stdout.flush() - sys.stderr.flush() - si = file(self.stdin, 'r') - so = file(self.stdout, 'a+') - se = file(self.stderr, 'a+', 0) - os.dup2(si.fileno(), sys.stdin.fileno()) - os.dup2(so.fileno(), sys.stdout.fileno()) - os.dup2(se.fileno(), sys.stderr.fileno()) - - # write pidfile - atexit.register(self.delpid) - pid = str(os.getpid()) - file(self.pidfile,'w+').write("%s\n" % pid) - - def delpid(self): - os.remove(self.pidfile) - - def start(self): - """ - Start the daemon - """ - # Check for a pidfile to see if the daemon already runs - try: - pf = file(self.pidfile,'r') - pid = int(pf.read().strip()) - pf.close() - except IOError: - pid = None - - if pid: - message = "pidfile %s already exist. Daemon already running?\n" - sys.stderr.write(message % self.pidfile) - sys.exit(1) - - # Start the daemon - self.daemonize() - self.run() - - def stop(self): - """ - Stop the daemon - """ - # Get the pid from the pidfile - try: - pf = file(self.pidfile,'r') - pid = int(pf.read().strip()) - pf.close() - except IOError: - pid = None - - if not pid: - message = "pidfile %s does not exist. Daemon not running?\n" - sys.stderr.write(message % self.pidfile) - return # not an error in a restart - - # Try killing the daemon process - try: - while 1: - os.kill(pid, SIGTERM) - time.sleep(0.1) - except OSError, err: - err = str(err) - if err.find("No such process") > 0: - if os.path.exists(self.pidfile): - os.remove(self.pidfile) - else: - print str(err) - sys.exit(1) - - def restart(self): - """ - Restart the daemon - """ - self.stop() - self.start() - - def run(self): - """ - You should override this method when you subclass Daemon. It will be called after the process has been - daemonized by start() or restart(). - """ \ No newline at end of file + +class BaseDaemon(object): + """ + A generic daemon class. + + Usage: subclass the Daemon class and override the run() method + """ + + startmsg = "started with pid %s" + + def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): + self.stdin = stdin + self.stdout = stdout + self.stderr = stderr + self.pidfile = pidfile + + def daemonize(self): + """ + do the UNIX double-fork magic, see Stevens' "Advanced + Programming in the UNIX Environment" for details (ISBN 0201563177) + http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 + """ + try: + pid = os.fork() + if pid > 0: + # exit first parent + sys.exit(0) + except OSError, e: + sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) + sys.exit(1) + + # decouple from parent environment + os.chdir(".") + os.setsid() + os.umask(0) + + # do second fork + try: + pid = os.fork() + if pid > 0: + # exit from second parent + sys.exit(0) + except OSError, e: + sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) + sys.exit(1) + + # redirect standard file descriptors + si = file(self.stdin, 'r') + so = file(self.stdout, 'a+') + se = file(self.stderr, 'a+', 0) + + pid = str(os.getpid()) + + sys.stderr.write("\n%s\n" % self.startmsg % pid) + sys.stderr.flush() + + if self.pidfile: + file(self.pidfile,'w+').write("%s\n" % pid) + + atexit.register(self.delpid) + os.dup2(si.fileno(), sys.stdin.fileno()) + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(se.fileno(), sys.stderr.fileno()) + + + + + def delpid(self): + os.remove(self.pidfile) + + def start(self): + """ + Start the daemon + """ + # Check for a pidfile to see if the daemon already runs + try: + pf = file(self.pidfile,'r') + pid = int(pf.read().strip()) + pf.close() + except IOError: + pid = None + + if pid: + message = "pidfile %s already exist. Daemon already running?\n" + sys.stderr.write(message % self.pidfile) + sys.exit(1) + + # Start the daemon + self.daemonize() + self.run() + + def stop(self): + """ + Stop the daemon + """ + # Get the pid from the pidfile + try: + pf = file(self.pidfile,'r') + pid = int(pf.read().strip()) + pf.close() + except IOError: + pid = None + + if not pid: + message = "pidfile %s does not exist. Daemon not running?\n" + sys.stderr.write(message % self.pidfile) + return # not an error in a restart + + # Try killing the daemon process + try: + while 1: + os.kill(pid, SIGTERM) + time.sleep(0.1) + except OSError, err: + err = str(err) + if err.find("No such process") > 0: + if os.path.exists(self.pidfile): + os.remove(self.pidfile) + else: + print str(err) + sys.exit(1) + + def restart(self): + """ + Restart the daemon + """ + self.stop() + self.start() + + def run(self): + """ + You should override this method when you subclass Daemon. It will be called after the process has been + daemonized by start() or restart(). + """ diff --git a/opt/ahenk/base/logger/AhenkLogger.py b/opt/ahenk/base/logger/AhenkLogger.py index d9d38c0..e60aac0 100644 --- a/opt/ahenk/base/logger/AhenkLogger.py +++ b/opt/ahenk/base/logger/AhenkLogger.py @@ -4,14 +4,13 @@ import sys import logging import logging.config -sys.path.insert(0,'/home/ismail/devzone/workspace/lider-ahenk/ahenk/opt/ahenk/') -#import ahenkd +from base.Scope import Scope -class AhenkLogger(object): +class Logger(object): """docstring for Logger""" def __init__(self): super(Logger, self).__init__() - scope = ahenkd.AhenkDeamon.scope() + scope = Scope.getInstance() configManager = scope.getConfigurationManager() logging.config.fileConfig(configManager.get('BASE','logConfigurationFilePath')) @@ -31,8 +30,3 @@ class AhenkLogger(object): def debug(self,logstring): self.logger.debug(logstring) - - -if __name__ == '__main__': - print "hello" - print sys.path