|
|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
#/usr/bin/python3
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
|
|
|
|
@ -9,6 +9,7 @@ import configparser
|
|
|
|
|
import multiprocessing
|
|
|
|
|
|
|
|
|
|
CONFIG_FILE = "/etc/butler.ini"
|
|
|
|
|
SHELL_EXECUTABLE = '/bin/bash' # Гарантируем использование bash
|
|
|
|
|
|
|
|
|
|
# --- Функции, выполняющие действия ---
|
|
|
|
|
|
|
|
|
|
@ -21,14 +22,13 @@ def are_users_there(check_cmd, service_name):
|
|
|
|
|
try:
|
|
|
|
|
# shell=True позволяет использовать пайпы (|) и другие возможности shell
|
|
|
|
|
# check=True бросит исключение CalledProcessError при ненулевом коде возврата
|
|
|
|
|
print(f"[{service_name}] run {check_cmd}.", flush=True)
|
|
|
|
|
subprocess.run(
|
|
|
|
|
check_cmd,
|
|
|
|
|
shell=True,
|
|
|
|
|
check=True,
|
|
|
|
|
stdout=subprocess.DEVNULL,
|
|
|
|
|
stderr=subprocess.DEVNULL,
|
|
|
|
|
executable='/bin/bash'
|
|
|
|
|
executable=SHELL_EXECUTABLE # Явно указываем bash
|
|
|
|
|
)
|
|
|
|
|
return True
|
|
|
|
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
|
|
|
@ -38,12 +38,12 @@ def are_users_there(check_cmd, service_name):
|
|
|
|
|
|
|
|
|
|
def server_shutdown(stop_cmd, service_name):
|
|
|
|
|
print(f"[{service_name}] Stopping server...", flush=True)
|
|
|
|
|
subprocess.run(stop_cmd, shell=True)
|
|
|
|
|
subprocess.run(stop_cmd, shell=True, executable=SHELL_EXECUTABLE)
|
|
|
|
|
print(f"[{service_name}] Stop command sent.", flush=True)
|
|
|
|
|
|
|
|
|
|
def server_startup(start_cmd, service_name):
|
|
|
|
|
print(f"[{service_name}] Starting server...", flush=True)
|
|
|
|
|
subprocess.run(start_cmd, shell=True)
|
|
|
|
|
subprocess.run(start_cmd, shell=True, executable=SHELL_EXECUTABLE)
|
|
|
|
|
print(f"[{service_name}] Start command sent.", flush=True)
|
|
|
|
|
|
|
|
|
|
def wait_client(host, port, service_name):
|
|
|
|
|
|