xref: /aosp_15_r20/external/autotest/client/cros/upstart.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
3*9c5db199SXin Li# found in the LICENSE file.
4*9c5db199SXin Li
5*9c5db199SXin Li"""Provides utility methods for interacting with upstart"""
6*9c5db199SXin Li
7*9c5db199SXin Liimport os
8*9c5db199SXin Liimport re
9*9c5db199SXin Li
10*9c5db199SXin Lifrom autotest_lib.client.common_lib import utils
11*9c5db199SXin Li
12*9c5db199SXin Li
13*9c5db199SXin Lidef emit_event(event_name):
14*9c5db199SXin Li    """Fails if the emit command fails.
15*9c5db199SXin Li
16*9c5db199SXin Li    @param service_name: name of the service.
17*9c5db199SXin Li    """
18*9c5db199SXin Li    utils.system('initctl emit %s' % event_name)
19*9c5db199SXin Li
20*9c5db199SXin Li
21*9c5db199SXin Lidef ensure_running(service_name):
22*9c5db199SXin Li    """Fails if |service_name| is not running.
23*9c5db199SXin Li
24*9c5db199SXin Li    @param service_name: name of the service.
25*9c5db199SXin Li    """
26*9c5db199SXin Li    cmd = 'initctl status %s | grep start/running' % service_name
27*9c5db199SXin Li    utils.system(cmd)
28*9c5db199SXin Li
29*9c5db199SXin Li
30*9c5db199SXin Lidef has_service(service_name):
31*9c5db199SXin Li    """Returns true if |service_name| is installed on the system.
32*9c5db199SXin Li
33*9c5db199SXin Li    @param service_name: name of the service.
34*9c5db199SXin Li    """
35*9c5db199SXin Li    return os.path.exists('/etc/init/' + service_name + '.conf')
36*9c5db199SXin Li
37*9c5db199SXin Li
38*9c5db199SXin Lidef is_running(service_name):
39*9c5db199SXin Li    """
40*9c5db199SXin Li    Returns true if |service_name| is running.
41*9c5db199SXin Li
42*9c5db199SXin Li    @param service_name: name of service
43*9c5db199SXin Li    """
44*9c5db199SXin Li    cmd = 'status %s' % service_name
45*9c5db199SXin Li    return utils.system_output(cmd).find('start/running') != -1
46*9c5db199SXin Li
47*9c5db199SXin Li
48*9c5db199SXin Lidef get_pid(service_name):
49*9c5db199SXin Li    """
50*9c5db199SXin Li    Returns integer of PID of |service_name| or None if not running.
51*9c5db199SXin Li
52*9c5db199SXin Li    @param service_name: name of service
53*9c5db199SXin Li    """
54*9c5db199SXin Li    res_str = utils.system_output('status %s' % service_name)
55*9c5db199SXin Li    match = re.search('process ([0-9]+)', res_str)
56*9c5db199SXin Li    if not match:
57*9c5db199SXin Li        return None
58*9c5db199SXin Li    return int(match.group(1))
59*9c5db199SXin Li
60*9c5db199SXin Li
61*9c5db199SXin Lidef restart_job(service_name):
62*9c5db199SXin Li    """
63*9c5db199SXin Li    Restarts an upstart job if it's running.
64*9c5db199SXin Li    If it's not running, start it.
65*9c5db199SXin Li
66*9c5db199SXin Li    @param service_name: name of service
67*9c5db199SXin Li    """
68*9c5db199SXin Li
69*9c5db199SXin Li    if is_running(service_name):
70*9c5db199SXin Li        utils.system_output('restart %s' % service_name)
71*9c5db199SXin Li    else:
72*9c5db199SXin Li        utils.system_output('start %s' % service_name)
73*9c5db199SXin Li
74*9c5db199SXin Li
75*9c5db199SXin Lidef stop_job(service_name):
76*9c5db199SXin Li    """
77*9c5db199SXin Li    Stops an upstart job.
78*9c5db199SXin Li    Fails if the stop command fails.
79*9c5db199SXin Li
80*9c5db199SXin Li    @param service_name: name of service
81*9c5db199SXin Li    """
82*9c5db199SXin Li
83*9c5db199SXin Li    utils.system('stop %s' % service_name)
84