1
|
|
|
""" |
2
|
|
|
Enarksh |
3
|
|
|
|
4
|
|
|
Copyright 2013-2016 Set Based IT Consultancy |
5
|
|
|
|
6
|
|
|
Licence MIT |
7
|
|
|
""" |
8
|
|
|
import logging |
9
|
|
|
import logging.handlers |
10
|
|
|
import os |
11
|
|
|
import sys |
12
|
|
|
|
13
|
|
|
from cleo import Command |
14
|
|
|
from daemon import DaemonContext |
15
|
|
|
from lockfile.pidlockfile import PIDLockFile |
16
|
|
|
|
17
|
|
|
import enarksh |
18
|
|
|
from enarksh.style.EnarkshStyle import EnarkshStyle |
19
|
|
|
|
20
|
|
|
|
21
|
|
|
class DaemonCommand(Command): |
22
|
|
|
""" |
23
|
|
|
Base class for commands for daemons. |
24
|
|
|
""" |
25
|
|
|
|
26
|
|
|
# ------------------------------------------------------------------------------------------------------------------ |
27
|
|
|
def handle_daemon(self, name, daemon): |
28
|
|
|
""" |
29
|
|
|
Executes the daemon command. |
30
|
|
|
|
31
|
|
|
:param str name: The name of the daemon. |
32
|
|
|
:param * daemon: The daemon, i.e. object with main method. |
33
|
|
|
""" |
34
|
|
|
self.output = EnarkshStyle(self.input, self.output) |
35
|
|
|
|
36
|
|
|
log = logging.getLogger('enarksh') |
37
|
|
|
log.setLevel(logging.INFO) |
38
|
|
|
log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') |
39
|
|
|
|
40
|
|
|
if self.option('daemonize'): |
41
|
|
|
log_file_name = os.path.join(enarksh.HOME, 'var/log', name + '.log') |
42
|
|
|
pid_file_name = os.path.join(enarksh.HOME, 'var/lock', name + '.pid') |
43
|
|
|
|
44
|
|
|
log_handler = logging.handlers.RotatingFileHandler(log_file_name, |
45
|
|
|
maxBytes=1024*1024, |
46
|
|
|
backupCount=10) |
47
|
|
|
log_handler.setLevel(logging.DEBUG) |
48
|
|
|
log_handler.setFormatter(log_formatter) |
49
|
|
|
log.addHandler(log_handler) |
50
|
|
|
|
51
|
|
|
output = open(log_file_name, 'ab', 0) |
52
|
|
|
|
53
|
|
|
context = DaemonContext() |
54
|
|
|
context.working_directory = enarksh.HOME |
55
|
|
|
context.umask = 0o002 |
56
|
|
|
context.pidfile = PIDLockFile(pid_file_name, False) |
57
|
|
|
context.stdout = output |
58
|
|
|
context.stderr = output |
59
|
|
|
context.files_preserve = [log_handler.stream] |
60
|
|
|
|
61
|
|
|
with context: |
62
|
|
|
daemon.main() |
63
|
|
|
else: |
64
|
|
|
log_handler = logging.StreamHandler(sys.stdout) |
65
|
|
|
log_handler.setLevel(logging.DEBUG) |
66
|
|
|
log_handler.setFormatter(log_formatter) |
67
|
|
|
log.addHandler(log_handler) |
68
|
|
|
|
69
|
|
|
daemon.main() |
70
|
|
|
|
71
|
|
|
# ---------------------------------------------------------------------------------------------------------------------- |
72
|
|
|
|