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
|
|
|
from enarksh.C import C |
18
|
|
|
from enarksh.Config import Config |
19
|
|
|
from enarksh.style.EnarkshStyle import EnarkshStyle |
20
|
|
|
|
21
|
|
|
|
22
|
|
|
class DaemonCommand(Command): |
23
|
|
|
""" |
24
|
|
|
Base class for commands for daemons. |
25
|
|
|
""" |
26
|
|
|
|
27
|
|
|
# ------------------------------------------------------------------------------------------------------------------ |
28
|
|
|
def handle_daemon(self, name, daemon): |
29
|
|
|
""" |
30
|
|
|
Executes the daemon command. |
31
|
|
|
|
32
|
|
|
:param str name: The name of the daemon. |
33
|
|
|
:param * daemon: The daemon, i.e. object with main method. |
34
|
|
|
""" |
35
|
|
|
self.output = EnarkshStyle(self.input, self.output) |
36
|
|
|
|
37
|
|
|
log = logging.getLogger('enarksh') |
38
|
|
|
log.setLevel(logging.INFO) |
39
|
|
|
log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') |
40
|
|
|
|
41
|
|
|
if self.option('daemonize'): |
42
|
|
|
config = Config.get() |
43
|
|
|
|
44
|
|
|
log_file_name = os.path.join(C.HOME, config.get_enarksh_log_dir(), name + '.log') |
45
|
|
|
pid_file_name = os.path.join(C.HOME, config.get_enarksh_lock_dir(), name + '.pid') |
46
|
|
|
|
47
|
|
|
log_handler = logging.handlers.RotatingFileHandler(log_file_name, |
48
|
|
|
maxBytes=config.get_enarksh_max_log_size(), |
49
|
|
|
backupCount=config.get_enarksh_log_back()) |
50
|
|
|
log_handler.setLevel(logging.DEBUG) |
51
|
|
|
log_handler.setFormatter(log_formatter) |
52
|
|
|
log.addHandler(log_handler) |
53
|
|
|
|
54
|
|
|
output = open(log_file_name, 'ab', 0) |
55
|
|
|
|
56
|
|
|
context = DaemonContext() |
57
|
|
|
context.working_directory = C.HOME |
58
|
|
|
context.umask = 0o002 |
59
|
|
|
context.pidfile = PIDLockFile(pid_file_name, False) |
60
|
|
|
context.stdout = output |
61
|
|
|
context.stderr = output |
62
|
|
|
context.files_preserve = [log_handler.stream] |
63
|
|
|
|
64
|
|
|
with context: |
65
|
|
|
daemon.main() |
66
|
|
|
else: |
67
|
|
|
log_handler = logging.StreamHandler(sys.stdout) |
68
|
|
|
log_handler.setLevel(logging.DEBUG) |
69
|
|
|
log_handler.setFormatter(log_formatter) |
70
|
|
|
log.addHandler(log_handler) |
71
|
|
|
|
72
|
|
|
daemon.main() |
73
|
|
|
|
74
|
|
|
# ---------------------------------------------------------------------------------------------------------------------- |
75
|
|
|
|