@@ -33,6 +33,11 @@ def __init__(self, name):
33
33
self .name = name
34
34
super ().__init__ ()
35
35
36
+ @property
37
+ def exists (self ):
38
+ """Test if service is exists"""
39
+ raise NotImplementedError
40
+
36
41
@property
37
42
def is_running (self ):
38
43
"""Test if service is running"""
@@ -169,6 +174,11 @@ def _has_systemd_suffix(self):
169
174
unit_suffix = self .name .split ("." )[- 1 ]
170
175
return unit_suffix in self .suffix_list
171
176
177
+ @property
178
+ def exists (self ):
179
+ cmd = self .run_test ('systemctl list-unit-files | grep -q"^%s"' , self .name )
180
+ return cmd .rc == 0
181
+
172
182
@property
173
183
def is_running (self ):
174
184
out = self .run_expect ([0 , 1 , 3 ], "systemctl is-active %s" , self .name )
@@ -227,6 +237,10 @@ def systemd_properties(self):
227
237
228
238
229
239
class UpstartService (SysvService ):
240
+ @property
241
+ def exists (self ):
242
+ return self ._host .file (f"/etc/init/{ self .name } .conf" ).exists
243
+
230
244
@property
231
245
def is_enabled (self ):
232
246
if (
@@ -269,6 +283,10 @@ def is_enabled(self):
269
283
270
284
271
285
class FreeBSDService (Service ):
286
+ @property
287
+ def exists (self ):
288
+ return self ._host .file (f"/etc/rc.d/{ self .name } " ).exists
289
+
272
290
@property
273
291
def is_running (self ):
274
292
return self .run_test ("service %s onestatus" , self .name ).rc == 0
@@ -285,6 +303,10 @@ def is_enabled(self):
285
303
286
304
287
305
class OpenBSDService (Service ):
306
+ @property
307
+ def exists (self ):
308
+ return self ._host .file (f"/etc/rc.d/{ self .name } " ).exists
309
+
288
310
@property
289
311
def is_running (self ):
290
312
return self .run_test ("/etc/rc.d/%s check" , self .name ).rc == 0
@@ -301,6 +323,10 @@ def is_enabled(self):
301
323
302
324
303
325
class NetBSDService (Service ):
326
+ @property
327
+ def exists (self ):
328
+ return self ._host .file (f"/etc/rc.d/{ self .name } " ).exists
329
+
304
330
@property
305
331
def is_running (self ):
306
332
return self .run_test ("/etc/rc.d/%s onestatus" , self .name ).rc == 0
@@ -311,6 +337,13 @@ def is_enabled(self):
311
337
312
338
313
339
class WindowsService (Service ):
340
+ @property
341
+ def exists (self ):
342
+ out = self .check_output (
343
+ f"Get-Service -Name { self .name } -ErrorAction SilentlyContinue"
344
+ )
345
+ return self .name in out
346
+
314
347
@property
315
348
def is_running (self ):
316
349
return (
0 commit comments