����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 216.73.216.82 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /opt/cloudlinux/venv/lib/python3.11/site-packages/cl_plus/daemon/ |
Upload File : |
# coding=utf-8 # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2020 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENCE.TXT # import os import platform import shutil import logging from .logsetup import setup_logging _log = None SENDER_SERVICE_NAME = 'cl_plus_sender' NODE_EXPORTER_SERVICE_NAME = 'cl_node_exporter' OLD_NODE_EXPORTER_SERVICE_NAME = 'node_exporter' _CL_PLUS_DIR: str = '/usr/share/cloudlinux/cl_plus' _CL_PLUS_SERVICE_DIR: str = f'{_CL_PLUS_DIR}/service' # CL6 service files _CL6_SERVICE_FILE_PATH: str = '/etc/rc.d/init.d' # CL7/8 service files _CL7_8_SYSTEMD_UNIT_FILE_PATH: str = '/etc/systemd/system' # Utilities _SERVICE_BIN = '/sbin/service' _CHKCONFIG_BIN = '/sbin/chkconfig' _SYSTEMCTL_BIN = '/usr/bin/systemctl' def init_logging(): setup_logging(console_level=logging.CRITICAL) global _log, _collectors_list _log = logging.getLogger('CL+_sender_daemon') def _install_daemon(service_name: str, is_cl6: bool): """ Install Node Exporter daemon to system :param service_name: name of service to install :param is_cl6: True is working on CL6, False - CL7/8 :return: None """ if is_cl6: # CL6 # /usr/share/cloudlinux/cl_plus/service/{service_name} -> /etc/rc.d/init.d/{service_name} src = os.path.join(_CL_PLUS_SERVICE_DIR, service_name) dest = os.path.join(_CL6_SERVICE_FILE_PATH, service_name) if os.path.isfile(dest): # daemon is installed skip return shutil.copy(src, dest) os.chmod(dest, 0o755) # Start service os.system(f'{_SERVICE_BIN} {service_name} start >/dev/null 2>&1') os.system(f'{_CHKCONFIG_BIN} --add {service_name} >/dev/null 2>&1') else: # CL7, CL8 # /usr/share/cloudlinux/cl_plus/service/{service_name}.service -> /etc/systemd/system/{service_name}.service src = os.path.join(_CL_PLUS_SERVICE_DIR, f'{service_name}.service') dest = os.path.join(_CL7_8_SYSTEMD_UNIT_FILE_PATH, f'{service_name}.service') if os.path.isfile(dest): # daemon is installed skip return shutil.copy(src, dest) os.chmod(dest, 0o644) os.system(f'{_SYSTEMCTL_BIN} daemon-reload') # Start daemon os.system(f'{_SYSTEMCTL_BIN} enable {service_name}') os.system(f'{_SYSTEMCTL_BIN} start {service_name}') def _stop_and_remove_daemon(service_name: str, is_cl6: bool): """ Stop and remove daemon from system :param service_name: name of service to remove :param is_cl6: True is working on CL6, False - CL7/8 :return: """ if is_cl6: # CL6 service_file = os.path.join(_CL6_SERVICE_FILE_PATH, service_name) if not os.path.exists(service_file): return os.system(f'{_SERVICE_BIN} {service_name} stop >/dev/null 2>&1') os.system(f'{_CHKCONFIG_BIN} --del {service_name} >/dev/null 2>&1') try: # Remove /etc/rc.d/init.d/{service_name} os.remove(service_file) except (OSError, IOError): pass else: # CL7, CL8 unit_file = os.path.join(_CL7_8_SYSTEMD_UNIT_FILE_PATH, f'{service_name}.service') if not os.path.exists(unit_file): return os.system(f'{_SYSTEMCTL_BIN} kill {service_name} >/dev/null 2>&1') os.system(f'{_SYSTEMCTL_BIN} disable {service_name} >/dev/null 2>&1') try: # Remove /etc/systemd/system/{service_name}.service os.remove(unit_file) except (OSError, IOError): pass os.system(f'{_SYSTEMCTL_BIN} daemon-reload >/dev/null 2>&1') def _is_cl_node_exporter(service_path): """ Checks that node_exporter service is ours and we must stop it path /usr/share/cloudlinux/cl_plus/node_exporter must be present in our service """ with open(service_path) as f: data = f.read() return f'{_CL_PLUS_DIR}/node_exporter' in data def clean_service_if_needed(service_name, is_cl6): if is_cl6: service_file = os.path.join(_CL6_SERVICE_FILE_PATH, service_name) else: service_file = os.path.join(_CL7_8_SYSTEMD_UNIT_FILE_PATH, f'{service_name}.service') if not os.path.exists(service_file) or not _is_cl_node_exporter(service_file): return _log.info('%s service detected, going to cleanup' % service_name) _stop_and_remove_daemon(service_name, is_cl6) def install_daemons(): """ Install CL+ sender and Node exporter daemons to system :return: """ init_logging() is_cl6 = 'el6' in platform.release() _install_daemon(NODE_EXPORTER_SERVICE_NAME, is_cl6) _install_daemon(SENDER_SERVICE_NAME, is_cl6) _log.info("CloudLinux+ daemons are installed") def remove_daemons(): """ Remove CL+ sender and Node exporter daemons from system :return: """ init_logging() is_cl6 = 'el6' in platform.release() _stop_and_remove_daemon(SENDER_SERVICE_NAME, is_cl6) _stop_and_remove_daemon(NODE_EXPORTER_SERVICE_NAME, is_cl6) clean_service_if_needed(OLD_NODE_EXPORTER_SERVICE_NAME, is_cl6) _log.info("CloudLinux+ daemons are removed")