Создание скрипта Python, печатающего результаты пинга во вращающийся журнал - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь создать скрипт на python, который постоянно проверяет связь с конкретным хостом и печатает результат этого в ежедневный ротационный файл журнала. Логи последних 30 дней должны быть сохранены, все старое должно быть удалено. У меня нет абсолютно никакого опыта использования Python.

1 Ответ

0 голосов
/ 29 октября 2019

Вы можете использовать стандартный модуль регистрации Python:

Ниже приведен пример кода с использованием «TimedRotatingFileHandler» из пакета ведения журнала. По сути, мы создаем обработчик журналирования, который регистрирует файл в течение 30 дней, а затем заменяет его новым файлом. Каждый раз, когда мы используем метод log, логи автоматически попадают в этот файл. Для части pinging мы используем пакет подпроцесса и запускаем команду ping в фоновом режиме для захвата его вывода.

import logging
import time
import subprocess

from logging.handlers import TimedRotatingFileHandler


def ping_host(path, hostname, ping_delay=20):
    """"""
    logger = logging.getLogger("Rotating Log")
    logger.setLevel(logging.INFO)
    handler = TimedRotatingFileHandler(path,
                                       when="d",
                                       interval=30,
                                       backupCount=1)
    logger.addHandler(handler)
    while True:
        response = subprocess.Popen(["/bin/ping", "-c1", "-w100", 
hostname], stdout=subprocess.PIPE).stdout.read()
        logger.info("Ping at {0}, result: {1}".format(time.time(), 
response))
        time.sleep(ping_delay)


if __name__ == "__main__":
    hostname = "google.com"
    log_file = "timed_test.log"
    ping_host(log_file, hostname)

Когда вы определяете конструктор "TimedRotatingFileHandler", вы можете передавать такие параметры, как:

  • (путь) путь к файлу журнала с именем

  • (когда) тип интервала здесь у нас есть «d», что означает «день», другие возможные значения«m», «s», «h»

  • (интервал) фактический интервал в виде целого числа, мы определили 30 дней

  • (backupCount) сколько существует копий журналов, если указано более 1, будет сохранено больше файлов журналов

Если вы хотите проверить это в реальном времени, замените «d» на"s" (секунда)

Для выполнения своей работы скрипт должен быть запущен.

Вы можете запустить его в фоновом режиме в оболочке linux:

nohup python3 your_file.py &
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...