запуск скрипта python в фоне
Русские Блоги
Несколько способов запуска скриптов Python в фоновом режиме
Сценарий мониторинга test1.py, написанный на python, работает в режиме True. Когда ssh удален (с помощью терминала замазки), запустите сценарий с помощью следующей команды:
Теперь сценарий работает нормально, вы можете увидеть номер процесса через ps, в это время непосредственно закройте терминал ssh (не используя команду выхода, но непосредственно через кнопку закрытия putty), после входа в систему снова и найденный Процесс уже завершен.
Проблема была решена путем запуска в фоновом режиме, и ее можно суммировать здесь, чтобы я мог обратиться к ней позже.
бегать в фоновом режиме под окнами
Под окнами нет глубоких исследований. Метод, который я часто использую, заключается в изменении расширения скрипта Python «.pyw». Двойной щелчок запускается в фоновом режиме без изменения кода.
Запустите в фоновом режиме под Linux
Через вилку
В среде Linux процесс демона в c реализован с помощью fork, и python также может быть реализован таким образом. Пример кода следующий:
Через выскочку
Приложение может быть упаковано как системная служба через upstart, и полный пример прямо записан здесь.
1. Напишите скрипт на Python
2. Напишите файл конфигурации upstat
Скрипт bash
1. код Python
Если вы используете & для запуска процесса напрямую:
Непосредственное закрытие терминала ssh приведет к завершению процесса.
Через экран, tmux и т. Д.
Если вы временно запустите программу, вы можете запустить программу через screen, tmux, здесь описывается, как запускается tmux.
1. Запустите tmux
Введите tmux в терминал, чтобы начать
2. Запустите программу в tmux
Просто выполните следующую команду напрямую (ссылка на скрипт выше): python test123.py
3. Закройте терминал ssh напрямую (например, кнопку закрытия на замазке);
4. После перезапуска ssh выполните следующую команду:
Интеллектуальная рекомендация
Простой анализ таблицы фоновых данных php-wordpress
веб-сайт python или php? Если честно, php понимает, и вам нужно знать грамматику, если вы ее пишете. Создание веб-сайта на Python нужно начинать с нуля. Включая шаблоны, cms и wordpress под php. Wordp.
Как запустить фоновый процесс в Python?
Я пытаюсь перенести сценарий оболочки в гораздо более читаемую версию python. Оригинальный скрипт запускает несколько процессов (утилиты, мониторы и т. д.) на заднем плане с»&». Как я могу достичь того же эффекта в Python? Я бы хотел, чтобы эти процессы не умирали, когда скрипты python завершатся. Я уверен, что это как-то связано с концепцией демона, но я не мог найти, как это сделать легко.
6 ответов
Примечание: этот ответ менее актуален, чем при публикации в 2009 году. С помощью subprocess модуль, показанный в других ответах, теперь рекомендуется в документах
(обратите внимание, что модуль подпроцесса предоставляет более мощные средства для создания новых процессов и получения их результатов; использование этого модуля предпочтительнее использования этих функций.)
если вы хотите, чтобы ваш процесс начнется в фоновом режиме вы может либо использовать system() и назовите его так же, как ваш сценарий оболочки, или вы можете spawn это:
(или, альтернативно, вы можете попробовать менее портативный os.P_NOWAIT флаг).
пример для вашего случая:
например, следующая команда не запустить в фоновом режиме:
кроме того, точка разъяснения: «фон» чисто концепция оболочки: то, что вы, вероятно, хотите, чтобы породить новый процесс. Я использовал » фон » здесь, чтобы ссылаться на shell-background-подобное поведение, но не путайте это с процессом, фактически находящимся в фон.
самый простой подход-использовать
в windows (win xp) родительский процесс не завершится до longtask.py завершила свою работу. Это не то, что вы хотите в CGI-скрипт. Проблема не специфична для Python, в сообществе PHP проблемы одинаковы.
решение-передать DETACHED_PROCESS Флаг Создания Процесса в базовый CreateProcess функция в win API. Если вы установили pywin32, вы можете импортировать флаг из модуль win32process, в противном случае вы должны определить его самостоятельно:
использовать subprocess.Popen() С close_fds=True параметр, который позволит порожденному подпроцессу быть отделенным от самого процесса Python и продолжать работать даже после выхода Python.
вы, вероятно, хотите начать исследовать модуль ОС для разветвления различных потоков (открыв интерактивный сеанс и выдав справку(os)). Соответствующими функциями являются fork и любой из exec. Чтобы дать вам представление о том, как начать, поместите что-то вроде этого в функцию, которая выполняет вилку (функция должна взять список или кортеж «args» в качестве аргумента, который содержит имя программы и ее параметры; вы также можете определить stdin, out и err для нового thread):
Как постоянно запускать скрипт Python в фоновом режиме в Windows?
Я создал скрипт, который перемещает файлы из одной папки в другую. Но поскольку исходная папка является папкой «Загрузки», мне нужно, чтобы она всегда работала в фоновом режиме.
У меня также есть стандартный пакетный файл, который выглядит примерно так:
Если есть, нужно ли выполнять скрипт каждый раз при перезагрузке или включении ПК?
Кроме того, как вы прекращаете процесс, когда вам удается сделать его постоянным?
3 ответа
В Windows вы можете использовать pythonw.exe по порядку для запуска скрипта Python в качестве фонового процесса:
Чтобы ваш скрипт работал непрерывно, вы можете использовать sched для планирования мероприятий:
Модуль sched определяет класс, который реализует планировщик событий общего назначения.
Я нашел решение, которое работает:
Если вы выполнили приведенный выше код без функции time.sleep (), программа вылетает после того, как новый файл входит в папку из-за ошибки «файл не найден», вложенной в другую ошибку «файл не найден». Не уверен, о чем идет речь, но я доволен тем, что у меня есть до сих пор. Единственное, что вам нужно сделать сейчас, это добавить скрипт в планировщик задач для запуска под Pythonw, чтобы он работал как фоновый процесс. Или вместо запуска сценария вы можете запустить командный файл, если не забываете добавить соответствующую инструкцию для pythonw. Вы должны начать процесс только один раз, конечно.
Одним из вариантов является изменение вашего сценария, чтобы он работал непрерывно, а не многократно. Просто оберните все это во время цикла и добавьте сон.
Как запустить скрипт Python в фоновом режиме даже после выхода из SSH?
У меня есть скрипт Python, bgservice.py и я хочу, чтобы он работал все время, потому что он является частью создаваемой мной веб-службы. Как я могу заставить его работать непрерывно даже после выхода из SSH?
В идеале вы должны запускать свой скрипт с чем-то вроде, supervise чтобы его можно было перезапустить, если (когда) он умрет.
Если вы уже запустили процесс и не хотите его останавливать и перезапускать под nohup, вы можете отправить его в фоновый режим, а затем отказаться от него.
Ctrl+Z (приостановить процесс)
bg (перезапустить процесс в фоновом режиме
disown %1 (при условии, что это работа №1, используйте jobs для определения)
Вы также можете использовать экран GNU, который должен быть почти в каждой системе Linux / Unix.
Вот простое решение внутри Python с использованием декоратора:
ЗШ оболочка имеет возможность сделать все фоновые процессы запускаются с поЬир.
/.zshrc добавить следующие строки:
Тогда вам просто нужно запустить такой процесс: python bgservice.py & и вам больше не нужно использовать команду nohup.
Я знаю, что не многие люди используют zsh, но это действительно классная оболочка, которую я бы порекомендовал.
Если вам нужно, чтобы процесс работал вечно, независимо от того, вошли вы в систему или нет, рассмотрите возможность запуска процесса как демона.
Вам не нужно писать дополнительный код или изменять существующие сценарии, чтобы это работало. Более того, подробная документация значительно упрощает этот процесс.
Надеюсь, это поможет кому-то, кто пытается заставить работать python-daemon
Как корректно запустить Python скрипт в фоне через SSH?
Не могу понять, почему все далее перечисленные варианты запуска Python скрипта в фоне не работают как я ожидаю. Есть у меня скрипт, который использует multiprocessing библиотеку для парсинга сайта. Выполняться скрипт должен 7-9 дней. Проверяю, запущен ли скрипт в фоне или нет с помощью команды ps.
Вот что я пробовал:
nohup python3 script.py
После ввода команды терминал выводит сообщение «nohup: ignoring input and appending output to ‘nohup.out'», но не дает ввести новую команду находясь в режиме обработки команды. Если нажать ctrl+с, то контроль над консолью возвращается, но работа скрипта прекращается. Если консоль закрыть, то запущенный скриптом процесс умирает.
python3 script.py > /dev/null &
В это случае консоль возвращает номер запущенного процесса, но вместо ожидаемого молчания от скрипта, вижу в консоли разные сервисные сообщения скрипта (в основном предупреждения от библиотеки urllib3). Консоль как и в первом случае не дает вводить новые команды без ввода ctrl+с. Если закрыть консоль, то скрипт отключается.
python3 script.py > script.log 2>&1 /null &
Консоль возвращает номер запущенного процесса, никаких предупреждений не выводится. Если закрыть консоль, а потом снова запустить, то после ввода команды ps процесс существует, но рандомным образом процесс умирает. Иногда через 5 минут, иногда чере 5 часов. В файле с логами (script.log) нет вообще никаких сообщений о краше.
Подскажите каким образом запускать скрипт, чтобы он работал в фоне корректно или как отладить текущую ситуацию?