Исходный вопрос:
У меня есть watchdog.py, этот скрипт должен обрабатывать другие скрипты, скажем, test1.py и test2.py
script1.py и script2.py запускаются самостоятельно в цикле, как, скажем, закрытые модули.
Единственная задача main.py — запустить и остановить другой, если необходимо, и перезапустить их, если возникнет ошибка (мониторинг).
Посмотрел popen и многопоточность, но не нашел способа отслеживать и перезапускать.Может ли кто-нибудь подсказать мне правильную процедуру или привести пример, как это сделать?
Мое решение на данный момент работает (в Linux) :
В основном я вызываю каждый скрипт с подпроцессом popen и уничтожаю его с помощью pkill. С моей точки зрения, это не лучшее решение, что возвращает меня к моему главному вопросу о правильной процедуре...
watchdog.py:
Основной сценарий, который выполняется в бесконечном цикле и при необходимости запускает, останавливает и перезапускает сценарии
whatchdog.ini:
Файл конфигурации, в котором определены скрипты и флаги запуска/остановки/перезапуска. Его можно изменить вручную или с помощью другого скрипта во время работы Whatchdog.py.
test1.py:
Простой тестовый скрипт, который печатает «Hello Test 1» каждые 10 секунд.
test2.py:
Простой тестовый скрипт, который печатает «Hello Test 1» каждые 10 секунд, но запускается с ошибкой после 2 раз (вызовет перезапуск, если флаг в ini равен 1)
Поместите все в папку и запустите watchdog.py, это тестовый скрипт, единственное, чего не хватает, это возможности установить полный путь к файлу для скриптов, но это легко изменить, если вы хотите его использовать...
Code Watchdog .py:
import time
import os
import subprocess
from multiprocessing import Process
import configparser
#Time interval how often should the watchdog script run (sec.)
interval = 10
# // FUNCTIONS //
# Function to read the config file
def read_config(section, key):
config = configparser.ConfigParser()
config.read('watchdog.ini')
return config[section][key]
# Function to start the Script as subprocess inside multiprocessing process
def start_script(scriptname):
sub_dict = {}
sub_id = "sub_id_" + scriptname
sub_variable_name = "start_" + scriptname
sub_variable_value = ['python', '' + str(scriptname) + '.py']
sub_dict[sub_variable_name] = sub_variable_value
sub_dict[sub_id] = sub_id
globals()[sub_dict[sub_id]] = subprocess.Popen(sub_dict[sub_variable_name])
# Function to kill (stop) a subprocess/script
def stop_script(scriptname):
command = 'pkill -f ' + str(scriptname) + '.py'
os.system(command);
# Check if subprocess/script is running
def running_script(scriptname):
sub_id = 'sub_id_' + scriptname
if sub_id in locals() or sub_id in globals():
if eval(sub_id).poll() == None:
#print(scriptname + ' is running')
return('running')
else:
#print(scriptname + ' not running')
return('stoped')
else:
return('not defined')
# // END FUNCTIONS //
# // MAIN LOOP //
while True:
# Loop throug sections of the config file to get all scripts
config = configparser.ConfigParser()
config.read('watchdog.ini')
all_section_names: list[str] = config.sections()
for section_name in all_section_names:
#print(section_name)
#Get start/stop/restart flags for the specific script
start = int(read_config(section_name, 'start'))
stop = int(read_config(section_name, 'stop'))
restart = int(read_config(section_name, 'restart'))
#Check Status running / stoped / not defined
status = str(running_script(section_name))
#Start script if start=1 and wasnt started before
if start == 1 and status == 'not defined':
start_script(section_name)
print(section_name + ' started')
# Stop the script if stop = 1
if stop == 1 and status != 'stoped' and status != 'not defined':
stop_script(section_name)
print(section_name + ' stoped')
# Restart script if restart = 1 and script was started before
if restart == 1 and status == 'stoped':
stop_script(section_name)
start_script(section_name)
print(section_name + ' restarted')
time.sleep(interval)
# // END MAIN LOOP //
Код watchdog.ini:
[test1]
start = 1
stop = 0
restart = 0
[test2]
start = 1
stop = 0
restart = 1
Код test1.py
# Scripts prints 'Hello Test 1' every 10sec and run without problems
import time
while True:
print('Hello Test 1')
time.sleep(10)
Код test2.py:
# Scripts prints 'Hello Test2" every 10sec but after two times it runs into an error and need to be / could be restarted by the main.py
import time
while True:
print("Hello Test 2")
time.sleep(10)
print("Hello Test 2")
time.sleep(10)
get.value
Подробнее здесь: https://stackoverflow.com/questions/791 ... tor-others
Основной скрипт, который запускает, останавливает и контролирует других ⇐ Python
Программы на Python
1732089041
Anonymous
[b]Исходный вопрос:[/b]
У меня есть watchdog.py, этот скрипт должен обрабатывать другие скрипты, скажем, test1.py и test2.py
script1.py и script2.py запускаются самостоятельно в цикле, как, скажем, закрытые модули.
Единственная задача main.py — запустить и остановить другой, если необходимо, и перезапустить их, если возникнет ошибка (мониторинг).
Посмотрел popen и многопоточность, но не нашел способа отслеживать и перезапускать.Может ли кто-нибудь подсказать мне правильную процедуру или привести пример, как это сделать?
[b]Мое решение на данный момент работает (в Linux) :[/b]
В основном я вызываю каждый скрипт с подпроцессом popen и уничтожаю его с помощью pkill. С моей точки зрения, это не лучшее решение, что возвращает меня к моему главному вопросу о правильной процедуре...
[b]watchdog.py:[/b]
Основной сценарий, который выполняется в бесконечном цикле и при необходимости запускает, останавливает и перезапускает сценарии
[b]whatchdog.ini:[/b]
Файл конфигурации, в котором определены скрипты и флаги запуска/остановки/перезапуска. Его можно изменить вручную или с помощью другого скрипта во время работы Whatchdog.py.
[b]test1.py:[/b]
Простой тестовый скрипт, который печатает «Hello Test 1» каждые 10 секунд.
[b]test2.py:[/b]
Простой тестовый скрипт, который печатает «Hello Test 1» каждые 10 секунд, но запускается с ошибкой после 2 раз (вызовет перезапуск, если флаг в ini равен 1)
Поместите все в папку и запустите watchdog.py, это тестовый скрипт, единственное, чего не хватает, это возможности установить полный путь к файлу для скриптов, но это легко изменить, если вы хотите его использовать...
[b]Code Watchdog .py:[/b]
import time
import os
import subprocess
from multiprocessing import Process
import configparser
#Time interval how often should the watchdog script run (sec.)
interval = 10
# // FUNCTIONS //
# Function to read the config file
def read_config(section, key):
config = configparser.ConfigParser()
config.read('watchdog.ini')
return config[section][key]
# Function to start the Script as subprocess inside multiprocessing process
def start_script(scriptname):
sub_dict = {}
sub_id = "sub_id_" + scriptname
sub_variable_name = "start_" + scriptname
sub_variable_value = ['python', '' + str(scriptname) + '.py']
sub_dict[sub_variable_name] = sub_variable_value
sub_dict[sub_id] = sub_id
globals()[sub_dict[sub_id]] = subprocess.Popen(sub_dict[sub_variable_name])
# Function to kill (stop) a subprocess/script
def stop_script(scriptname):
command = 'pkill -f ' + str(scriptname) + '.py'
os.system(command);
# Check if subprocess/script is running
def running_script(scriptname):
sub_id = 'sub_id_' + scriptname
if sub_id in locals() or sub_id in globals():
if eval(sub_id).poll() == None:
#print(scriptname + ' is running')
return('running')
else:
#print(scriptname + ' not running')
return('stoped')
else:
return('not defined')
# // END FUNCTIONS //
# // MAIN LOOP //
while True:
# Loop throug sections of the config file to get all scripts
config = configparser.ConfigParser()
config.read('watchdog.ini')
all_section_names: list[str] = config.sections()
for section_name in all_section_names:
#print(section_name)
#Get start/stop/restart flags for the specific script
start = int(read_config(section_name, 'start'))
stop = int(read_config(section_name, 'stop'))
restart = int(read_config(section_name, 'restart'))
#Check Status running / stoped / not defined
status = str(running_script(section_name))
#Start script if start=1 and wasnt started before
if start == 1 and status == 'not defined':
start_script(section_name)
print(section_name + ' started')
# Stop the script if stop = 1
if stop == 1 and status != 'stoped' and status != 'not defined':
stop_script(section_name)
print(section_name + ' stoped')
# Restart script if restart = 1 and script was started before
if restart == 1 and status == 'stoped':
stop_script(section_name)
start_script(section_name)
print(section_name + ' restarted')
time.sleep(interval)
# // END MAIN LOOP //
[b]Код watchdog.ini:[/b]
[test1]
start = 1
stop = 0
restart = 0
[test2]
start = 1
stop = 0
restart = 1
[b]Код test1.py[/b]
# Scripts prints 'Hello Test 1' every 10sec and run without problems
import time
while True:
print('Hello Test 1')
time.sleep(10)
[b]Код test2.py:[/b]
# Scripts prints 'Hello Test2" every 10sec but after two times it runs into an error and need to be / could be restarted by the main.py
import time
while True:
print("Hello Test 2")
time.sleep(10)
print("Hello Test 2")
time.sleep(10)
get.value
Подробнее здесь: [url]https://stackoverflow.com/questions/79178304/main-script-that-start-stop-and-monitor-others[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия