blob: e0b855995c0fc80f48a041d8617991b0090bfa2f [file] [log] [blame]
Jason Glasgow5395ed22011-08-19 13:16:47 -04001# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Ryan Harrisonb74d2242013-02-04 11:36:49 -05005"""Provides utility methods for interacting with upstart"""
Jason Glasgow5395ed22011-08-19 13:16:47 -04006
Paul Stewartf748e3b2011-09-12 15:04:11 -07007import os
Todd Brochafe0fed2020-08-25 14:24:10 -07008import re
Jason Glasgow5395ed22011-08-19 13:16:47 -04009
Andrey Ulanovec24bc22015-05-05 21:15:08 -070010from autotest_lib.client.common_lib import utils
11
Allen Webbff11d952018-08-22 17:22:10 -070012
13def emit_event(event_name):
14 """Fails if the emit command fails.
15
16 @param service_name: name of the service.
17 """
18 utils.system('initctl emit %s' % event_name)
19
20
Jason Glasgow5395ed22011-08-19 13:16:47 -040021def ensure_running(service_name):
Bertrand SIMONNETbd6cdb62014-07-01 12:25:27 -070022 """Fails if |service_name| is not running.
23
24 @param service_name: name of the service.
25 """
Jason Glasgow5395ed22011-08-19 13:16:47 -040026 cmd = 'initctl status %s | grep start/running' % service_name
Andrey Ulanovec24bc22015-05-05 21:15:08 -070027 utils.system(cmd)
Bertrand SIMONNETbd6cdb62014-07-01 12:25:27 -070028
29
30def has_service(service_name):
31 """Returns true if |service_name| is installed on the system.
32
33 @param service_name: name of the service.
34 """
35 return os.path.exists('/etc/init/' + service_name + '.conf')
Brian Norris8a0bd702016-06-03 18:06:55 -070036
37
Brian Norris1f5870a2016-06-03 18:18:10 -070038def is_running(service_name):
39 """
40 Returns true if |service_name| is running.
41
42 @param service_name: name of service
43 """
Todd Brochff798112020-08-25 12:10:17 -070044 cmd = 'status %s' % service_name
45 return utils.system_output(cmd).find('start/running') != -1
46
Brian Norris1f5870a2016-06-03 18:18:10 -070047
Todd Brochafe0fed2020-08-25 14:24:10 -070048def get_pid(service_name):
49 """
50 Returns integer of PID of |service_name| or None if not running.
51
52 @param service_name: name of service
53 """
54 res_str = utils.system_output('status %s' % service_name)
55 match = re.search('process ([0-9]+)', res_str)
56 if not match:
57 return None
58 return int(match.group(1))
59
60
Brian Norris8a0bd702016-06-03 18:06:55 -070061def restart_job(service_name):
62 """
63 Restarts an upstart job if it's running.
64 If it's not running, start it.
65
66 @param service_name: name of service
67 """
68
Brian Norris1f5870a2016-06-03 18:18:10 -070069 if is_running(service_name):
Brian Norris8a0bd702016-06-03 18:06:55 -070070 utils.system_output('restart %s' % service_name)
71 else:
72 utils.system_output('start %s' % service_name)
Brian Norris686b7242016-06-03 18:30:46 -070073
Todd Brochff798112020-08-25 12:10:17 -070074
Brian Norris686b7242016-06-03 18:30:46 -070075def stop_job(service_name):
Eric Caruso48b15702019-07-19 15:14:38 -070076 """
77 Stops an upstart job.
78 Fails if the stop command fails.
Brian Norris686b7242016-06-03 18:30:46 -070079
Eric Caruso48b15702019-07-19 15:14:38 -070080 @param service_name: name of service
81 """
Brian Norris686b7242016-06-03 18:30:46 -070082
Eric Caruso48b15702019-07-19 15:14:38 -070083 utils.system('stop %s' % service_name)