Mini Shell
# -*- coding: utf-8 -*-
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
"""
This module contains X Ray Agent main run function
"""
import os
from typing import Optional
from xray import gettext as _
from xray.agent.daemon import Agent
from xray.internal import constants
from xray.internal.utils import (
configure_logging,
create_socket,
write_sys_id,
read_sys_id
)
PIDFILE = '/var/run/xray-agent.pid'
def _save_pid(pid: int, pidfile: str):
"""
Save agent process pid to file that other tools can use.
"""
with open(pidfile, 'w') as f:
f.write(str(pid))
def _read_pid(pidfile: str) -> Optional[int]:
try:
with open(pidfile, 'r') as f:
pid = int(f.read())
except (OSError, IOError, ValueError):
return None
# check that process is really still alive
# and not just failed to clean the pidfile
try:
os.kill(pid, 0)
except ProcessLookupError:
return None
return pid
def run(agent = None,
pidfile: str = PIDFILE,
system_id_cache_file: str = constants.agent_file) -> None:
"""
Main run function
"""
if _read_pid(pidfile):
print(_('Another daemon instance is already running, please, stop it first.'))
exit(1)
configure_logging(constants.agent_log)
if agent is None:
agent = Agent(system_id=read_sys_id())
write_sys_id(agent.sys_id, agent_system_id_path=system_id_cache_file)
_save_pid(pid=os.getpid(), pidfile=pidfile)
with create_socket(constants.agent_sock) as socket:
agent.start(socket, background_routine=True)
Zerion Mini Shell 1.0