This commit is contained in:
İsmail Başaran 2016-02-25 17:24:07 +02:00
parent 9f6b9f5a1f
commit a22487f8ce
4 changed files with 147 additions and 143 deletions

View file

@ -10,7 +10,7 @@ keys=file
[handler_file] [handler_file]
class=logging.FileHandler class=logging.FileHandler
level=ERROR level=INFO
formatter=default formatter=default
args=("/var/log/ahenk.log", "w") args=("/var/log/ahenk.log", "w")

View file

@ -3,17 +3,18 @@
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com> # Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
from base.config.ConfigManager import ConfigManager from base.config.ConfigManager import ConfigManager
from base.deamon.BaseDeamon import BaseDeamon from base.deamon.BaseDeamon import BaseDaemon
from base.logging.AhenkLogger import Logger from base.logger.AhenkLogger import Logger
from base.Scope import Scope from base.Scope import Scope
#from base.messaging.Messaging import Messaging #from base.messaging.Messaging import Messaging
import sys,logging import sys,logging
class AhenkDeamon(BaseDeamon): class AhenkDeamon(BaseDaemon):
"""docstring for AhenkDeamon""" """docstring for AhenkDeamon"""
def run(self): def run(self):
print "merhaba dunya"
globalscope = Scope() globalscope = Scope()
globalscope.setInstance(globalscope) globalscope.setInstance(globalscope)
@ -34,17 +35,18 @@ if __name__ == '__main__':
pidfilePath='/var/run/ahenk.pid' pidfilePath='/var/run/ahenk.pid'
ahenkdeamon = AhenkDeamon(pidfilePath) ahenkdaemon = AhenkDeamon(pidfilePath)
print sys.argv print sys.argv
if len(sys.argv) == 2: if len(sys.argv) == 2:
if sys.argv[1] == "start": if sys.argv[1] == "start":
print "starting" print "starting"
ahenkdeamon.start() ahenkdaemon.start()
print ahenkdaemon.get_pid()
elif sys.argv[1] == 'stop': elif sys.argv[1] == 'stop':
ahenkdeamon.stop() ahenkdaemon.stop()
elif sys.argv[1] == 'restart': elif sys.argv[1] == 'restart':
ahenkdeamon.restart() ahenkdaemon.restart()
elif sys.argv[1] == 'status': elif sys.argv[1] == 'status':
# print status # print status
pass pass

View file

@ -1,129 +1,137 @@
#!/usr/bin/env python #!/usr/bin/env python
import sys, os, time, atexit import sys, os, time, atexit
from signal import SIGTERM from signal import SIGTERM
class BaseDeamon: class BaseDaemon(object):
""" """
A generic daemon class. A generic daemon class.
Usage: subclass the Daemon class and override the run() method 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 startmsg = "started with pid %s"
self.stdout = stdout
self.stderr = stderr def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
self.pidfile = pidfile self.stdin = stdin
self.stdout = stdout
def daemonize(self): self.stderr = stderr
""" self.pidfile = pidfile
do the UNIX double-fork magic, see Stevens' "Advanced
Programming in the UNIX Environment" for details (ISBN 0201563177) def daemonize(self):
http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 """
""" do the UNIX double-fork magic, see Stevens' "Advanced
try: Programming in the UNIX Environment" for details (ISBN 0201563177)
pid = os.fork() http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
if pid > 0: """
# exit first parent try:
sys.exit(0) pid = os.fork()
except OSError, e: if pid > 0:
sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) # exit first parent
sys.exit(1) sys.exit(0)
except OSError, e:
# decouple from parent environment sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
os.chdir("/") sys.exit(1)
os.setsid()
os.umask(0) # decouple from parent environment
os.chdir(".")
# do second fork os.setsid()
try: os.umask(0)
pid = os.fork()
if pid > 0: # do second fork
# exit from second parent try:
sys.exit(0) pid = os.fork()
except OSError, e: if pid > 0:
sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) # exit from second parent
sys.exit(1) sys.exit(0)
except OSError, e:
# redirect standard file descriptors sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
sys.stdout.flush() sys.exit(1)
sys.stderr.flush()
si = file(self.stdin, 'r') # redirect standard file descriptors
so = file(self.stdout, 'a+') si = file(self.stdin, 'r')
se = file(self.stderr, 'a+', 0) so = file(self.stdout, 'a+')
os.dup2(si.fileno(), sys.stdin.fileno()) se = file(self.stderr, 'a+', 0)
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno()) pid = str(os.getpid())
# write pidfile sys.stderr.write("\n%s\n" % self.startmsg % pid)
atexit.register(self.delpid) sys.stderr.flush()
pid = str(os.getpid())
file(self.pidfile,'w+').write("%s\n" % pid) if self.pidfile:
file(self.pidfile,'w+').write("%s\n" % pid)
def delpid(self):
os.remove(self.pidfile) atexit.register(self.delpid)
os.dup2(si.fileno(), sys.stdin.fileno())
def start(self): os.dup2(so.fileno(), sys.stdout.fileno())
""" os.dup2(se.fileno(), sys.stderr.fileno())
Start the daemon
"""
# Check for a pidfile to see if the daemon already runs
try:
pf = file(self.pidfile,'r') def delpid(self):
pid = int(pf.read().strip()) os.remove(self.pidfile)
pf.close()
except IOError: def start(self):
pid = None """
Start the daemon
if pid: """
message = "pidfile %s already exist. Daemon already running?\n" # Check for a pidfile to see if the daemon already runs
sys.stderr.write(message % self.pidfile) try:
sys.exit(1) pf = file(self.pidfile,'r')
pid = int(pf.read().strip())
# Start the daemon pf.close()
self.daemonize() except IOError:
self.run() pid = None
def stop(self): if pid:
""" message = "pidfile %s already exist. Daemon already running?\n"
Stop the daemon sys.stderr.write(message % self.pidfile)
""" sys.exit(1)
# Get the pid from the pidfile
try: # Start the daemon
pf = file(self.pidfile,'r') self.daemonize()
pid = int(pf.read().strip()) self.run()
pf.close()
except IOError: def stop(self):
pid = None """
Stop the daemon
if not pid: """
message = "pidfile %s does not exist. Daemon not running?\n" # Get the pid from the pidfile
sys.stderr.write(message % self.pidfile) try:
return # not an error in a restart pf = file(self.pidfile,'r')
pid = int(pf.read().strip())
# Try killing the daemon process pf.close()
try: except IOError:
while 1: pid = None
os.kill(pid, SIGTERM)
time.sleep(0.1) if not pid:
except OSError, err: message = "pidfile %s does not exist. Daemon not running?\n"
err = str(err) sys.stderr.write(message % self.pidfile)
if err.find("No such process") > 0: return # not an error in a restart
if os.path.exists(self.pidfile):
os.remove(self.pidfile) # Try killing the daemon process
else: try:
print str(err) while 1:
sys.exit(1) os.kill(pid, SIGTERM)
time.sleep(0.1)
def restart(self): except OSError, err:
""" err = str(err)
Restart the daemon if err.find("No such process") > 0:
""" if os.path.exists(self.pidfile):
self.stop() os.remove(self.pidfile)
self.start() else:
print str(err)
def run(self): sys.exit(1)
"""
You should override this method when you subclass Daemon. It will be called after the process has been def restart(self):
daemonized by start() or restart(). """
""" 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().
"""

View file

@ -4,14 +4,13 @@
import sys import sys
import logging import logging
import logging.config import logging.config
sys.path.insert(0,'/home/ismail/devzone/workspace/lider-ahenk/ahenk/opt/ahenk/') from base.Scope import Scope
#import ahenkd
class AhenkLogger(object): class Logger(object):
"""docstring for Logger""" """docstring for Logger"""
def __init__(self): def __init__(self):
super(Logger, self).__init__() super(Logger, self).__init__()
scope = ahenkd.AhenkDeamon.scope() scope = Scope.getInstance()
configManager = scope.getConfigurationManager() configManager = scope.getConfigurationManager()
logging.config.fileConfig(configManager.get('BASE','logConfigurationFilePath')) logging.config.fileConfig(configManager.get('BASE','logConfigurationFilePath'))
@ -31,8 +30,3 @@ class AhenkLogger(object):
def debug(self,logstring): def debug(self,logstring):
self.logger.debug(logstring) self.logger.debug(logstring)
if __name__ == '__main__':
print "hello"
print sys.path