File: launch.py

package info (click to toggle)
procserv 2.8.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,356 kB
  • sloc: sh: 4,154; cpp: 1,715; ansic: 1,417; python: 870; makefile: 65
file content (73 lines) | stat: -rwxr-xr-x 1,991 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

import sys, os
from .conf import getconf, getrundir

try:
    import shlex
except ImportError:
    from . import shlex

def getargs():
    from argparse import ArgumentParser
    A = ArgumentParser()
    A.add_argument('name', help='procServ instance name')
    A.add_argument('--user', action='store_true', default=os.geteuid()!=0,
                   help='Consider user config')
    A.add_argument('--system', dest='user', action='store_false',
                   help='Consider system config')
    A.add_argument('-d','--debug', action='count', default=0)
    return A.parse_args()

def main(args):
    conf = getconf(user=args.user)

    name, user = args.name, args.user

    if not conf.has_section(name):
        sys.stderr.write("Instance '%s' not found"%name)
        sys.exit(1)

    if not conf.getboolean(name, 'instance'):
        sys.stderr.write("'%s' not an instance"%name)
        sys.exit(1)

    if not conf.has_option(name, 'command'):
        sys.stderr.write("instance '%s' missing command="%name)
        sys.exit(1)

    chdir = conf.get(name, 'chdir')
    cmd   = conf.get(name, 'command')
    port  = conf.get(name, 'port')

    rundir = getrundir(user=user)

    env = {
        'PROCSERV_NAME':name,
        'IOCNAME':name,
    }
    env.update(os.environ)

    toexec = [
        'procServ',
        '--foreground',
        '--logfile', '-',
        '--name', name,
        '--ignore','^D^C^]',
        '--logoutcmd', '^D',
        '--chdir',chdir,
        '--info-file',os.path.join(rundir, 'procserv-%s'%name, 'info'), #/run/procserv-$NAME/info
        '--port', port if port != "0" else 'unix:%s/procserv-%s/control'%(rundir,name),
    ]

    if args.debug>1:
        toexec.append('--debug')

    #toexec.append(port)
    toexec.extend(shlex.split(cmd))

    if args.debug>0:
        sys.stderr.write('in %s exec: %s\n'%(chdir, ' '.join(map(shlex.quote, toexec))))

    os.chdir(chdir)
    os.execvpe(toexec[0], toexec, env)
    sys.exit(2) # never reached