@anton13ms

Как автоматически запускать Python программу после её изменения в OS Linux?

Подскажите пожалуйста, как реализовать запуск Python программы на Linux, при её изменении? То есть идея такая, редактирую файл Python программы, на своем хостовом ПК, сохраняю, после сохранения он автоматически загружается через WinSCP на удаленную Linux машину. Но было бы не плохо, что бы программа после её изменении сразу стартовала с выводом в консоль…
Пробовал реализовать это с помощью утилиты incron, запустил её: ~# service incron status
● incron.service - file system events scheduler
Loaded: loaded (/lib/systemd/system/incron.service; enabled; vendor preset: enabled)
Active: active (running)

Прописал в конфигурации: incrontab –e
/tmp/test.py IN_MODIFY python3 /tmp/test.py

Но почему то после редактирования файла программа, не запускается.
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
@anton13ms Автор вопроса
В общем, пока не придумал, ни чего лучше, кроме как написать Python программу, для запуска другой Python программы)))
А так как мне все это нужно для отладки, то думаю пока этого будет достаточно:
import os, datetime, sys, time, subprocess, io

def tracking_program(path): 
    dateFile1 = os.stat(path) 
    while(1): 
        dateFile = os.stat(path) 
        if dateFile != dateFile1: 
            print("\n\n\n")
            proc = subprocess.Popen("python3 %s" % path, shell=True, stdout=subprocess.PIPE, encoding='utf8') 
            out = proc.stdout.readlines() 
            if out: 
                for fOut in out:
                    print(fOut[:-1]) 
            print("\n\n\n") 
            dateFile1 = os.stat(path) 
        time.sleep(5) 

tracking_program(sys.argv[1])
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pfg21
ex-турист
systemd.path
PathChanged=
may be used to watch a file or directory and activate the configured unit whenever it changes.
ну и в Exec* юнита пишешь что нужно.

если нужна демоничность запускаемого, то прописываешь перезагрузку этого демона.

опять же не понятно что конкретно ты хотел от вывода, ибо и крон и системд запускает скрипт в отдельном от юзвер.консоли потоке
Ответ написан
@ProFfeSsoRr
Сис.админ по Linux
Вы хотите себе то, что называется ci/cd. И по-хорошему это делается так:
1) редактируете файлы у себя на компьютере, делаете коммит в git репозиторий
2) на стороне git репозитория при получении коммита запускается автоматизация, которая и доставит ваш код до сервера и выполнит на нём необходимые действия. В простом случае - скопирует файлы куда надо и сделает перезапуск программы. В более сложном - соберет программу в контейнер и запустит его. В еще более сложном - сначала тесты прогонит.

т.к. у вас случай совсем простой, чем не подходит вариант:
1) написать systemd юнит
2) раз по scp копируете, значит ssh у вас есть, просто копируйте файл и дальше посылайте systemctl restart your_program.service
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы