����JFIF��x�x����'403WebShell
403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/cloudlinux/venv/lib/python3.11/site-packages/cl_plus/daemon//daemon_control.py
# 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")

Youez - 2016 - github.com/yon3zu
LinuXploit