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]
class=logging.FileHandler
level=ERROR
level=INFO
formatter=default
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>
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

View file

@ -1,129 +1,137 @@
#!/usr/bin/env python
import sys, os, time, atexit
from signal import SIGTERM
class BaseDeamon:
"""
A generic daemon class.
class BaseDaemon(object):
"""
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
Usage: subclass the Daemon class and override the run() method
"""
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)
startmsg = "started with pid %s"
# decouple from parent environment
os.chdir("/")
os.setsid()
os.umask(0)
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
# 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)
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)
# 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())
# decouple from parent environment
os.chdir(".")
os.setsid()
os.umask(0)
# write pidfile
atexit.register(self.delpid)
pid = str(os.getpid())
file(self.pidfile,'w+').write("%s\n" % pid)
# 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)
def delpid(self):
os.remove(self.pidfile)
# redirect standard file descriptors
si = file(self.stdin, 'r')
so = file(self.stdout, 'a+')
se = file(self.stderr, 'a+', 0)
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
pid = str(os.getpid())
if pid:
message = "pidfile %s already exist. Daemon already running?\n"
sys.stderr.write(message % self.pidfile)
sys.exit(1)
sys.stderr.write("\n%s\n" % self.startmsg % pid)
sys.stderr.flush()
# Start the daemon
self.daemonize()
self.run()
if self.pidfile:
file(self.pidfile,'w+').write("%s\n" % pid)
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
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())
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().
"""
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().
"""

View file

@ -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