Revision 743b53d4 lib/daemon.py
b/lib/daemon.py | ||
---|---|---|
24 | 24 |
|
25 | 25 |
import asyncore |
26 | 26 |
import asynchat |
27 |
import grp |
|
27 | 28 |
import os |
29 |
import pwd |
|
28 | 30 |
import signal |
29 | 31 |
import logging |
30 | 32 |
import sched |
... | ... | |
38 | 40 |
from ganeti import errors |
39 | 41 |
|
40 | 42 |
|
43 |
_DEFAULT_RUN_USER = "root" |
|
44 |
_DEFAULT_RUN_GROUP = "root" |
|
45 |
|
|
46 |
|
|
41 | 47 |
class SchedulerBreakout(Exception): |
42 | 48 |
"""Exception used to get out of the scheduler loop |
43 | 49 |
|
... | ... | |
434 | 440 |
|
435 | 441 |
def GenericMain(daemon_name, optionparser, dirs, check_fn, exec_fn, |
436 | 442 |
multithreaded=False, console_logging=False, |
437 |
default_ssl_cert=None, default_ssl_key=None): |
|
443 |
default_ssl_cert=None, default_ssl_key=None, |
|
444 |
user=_DEFAULT_RUN_USER, group=_DEFAULT_RUN_GROUP): |
|
438 | 445 |
"""Shared main function for daemons. |
439 | 446 |
|
440 | 447 |
@type daemon_name: string |
... | ... | |
460 | 467 |
@param default_ssl_cert: Default SSL certificate path |
461 | 468 |
@type default_ssl_key: string |
462 | 469 |
@param default_ssl_key: Default SSL key path |
470 |
@param user: Default user to run as |
|
471 |
@type user: string |
|
472 |
@param group: Default group to run as |
|
473 |
@type group: string |
|
463 | 474 |
|
464 | 475 |
""" |
465 | 476 |
optionparser.add_option("-f", "--foreground", dest="fork", |
... | ... | |
529 | 540 |
utils.EnsureDirs(dirs) |
530 | 541 |
|
531 | 542 |
if options.fork: |
543 |
try: |
|
544 |
uid = pwd.getpwnam(user).pw_uid |
|
545 |
gid = grp.getgrnam(group).gr_gid |
|
546 |
except KeyError: |
|
547 |
raise errors.ConfigurationError("User or group not existing on system:" |
|
548 |
" %s:%s" % (user, group)) |
|
532 | 549 |
utils.CloseFDs() |
533 |
utils.Daemonize(logfile=constants.DAEMONS_LOGFILES[daemon_name])
|
|
550 |
utils.Daemonize(constants.DAEMONS_LOGFILES[daemon_name], uid, gid)
|
|
534 | 551 |
|
535 | 552 |
utils.WritePidFile(daemon_name) |
536 | 553 |
try: |
Also available in: Unified diff