linux запустить скрипт python в фоне
Как запустить процесс в фоне Linux
Как правило, выполнение команд в терминале связано с одним неудобством — прежде чем приступить к вводу следующей команды, следует дождаться выполнения предыдущей. Это происходит, поскольку текущий процесс блокирует доступ к оболочке операционной системы и в таких случаях говорят, что команда выполняется на переднем плане. Что же делать, если нужно запустить несколько команд одновременно? Есть несколько решений. Первое и наиболее очевидное — открыть дополнительное окно терминала. Второе — инициировать выполнение команды в фоновом режиме.
Если какой-либо процесс происходит в фоновом режиме, это значит, что он не предусматривает взаимодействия с пользователем, следовательно, доступ к оболочке остается свободным. Прочитав эту статью, вы узнаете как запустить процесс в фоне Linux и что делать, чтобы их выполнение не прерывалось после закрытия терминала.
Как запустить процесс в фоне Linux
Для выполнения команды в фоновом режиме достаточно добавить в конце символ амперсанда (&):
В выводе терминала будут отображены порядковый номер задачи (в квадратных скобках) и идентификатор процесса:
В фоновом режиме можно одновременно запускать сразу два, три, четыре процесса и даже больше.
Работая в фоновом режиме, команда все равно продолжает выводить сообщения в терминал, из которого была запущена. Для этого она использует потоки stdout и stderr, которые можно закрыть при помощи следующего синтаксиса:
command > /dev/null 2>&1 &
Здесь >/dev/null 2>&1 обозначает, что stdout будет перенаправлен на /dev/null, а stderr — к stdout.
Узнать состояние всех остановленных и выполняемых в фоновом режиме задач в рамках текущей сессии терминала можно при помощи утилиты jobs c использованием опции -l:
Вывод содержит порядковый номер задачи, идентификатор фонового процесса, состояние задачи и название команды, которая запустила задание.
В любое время можно вернуть процесс из фонового режима на передний план. Для этого служит команда fg:
Если в фоновом режиме выполняется несколько программ, следует также указывать номер. Например:
Для завершения фонового процесса применяют команду kill с номером программы:
Как перевести процесс в фоновый режим
Если изначально процесс был запущен обычным способом, его можно перевести в фоновый режим, выполнив следующие действия:
Работа процессов в фоне
Как и в предыдущих случаях, при наличии нескольких одновременно выполняемых процессов следует указывать номер того, относительно которого будет выполнено действие:
Второй способ сохранить запущенные процессы после прекращения работы терминала — команда nohup. Она выполняет другую команду, которая была указана в качестве аргумента, при этом игнорирует все сигналы SIGHUP (те, которые получает процесс при закрытии терминала). Для запуска команды в фоновом режиме нужно написать команду в виде:
Как видно на скриншоте, вывод команды перенаправляется в файл nohup.out. При этом после выхода из системы или закрытия терминала процесс не завершается. Существует ряд программ, которые позволяют запускать несколько интерактивных сессий одновременно. Наиболее популярные из них — Screen и Tmux.
Выводы
Чтобы запустить скрипт в фоне linux, достаточно добавить в конце знак &. При запуске команд в фоновом режиме отпадает необходимость дожидаться завершения одной команды для того, чтобы ввести другую. Если у вас возникли вопросы, обязательно задавайте их в комментариях.
Средства запуска python скриптов в backgdound
ps: запуск с добавлением логического И в конце, ничего не меняет.
открепить процесс от терминала. он по-прежнему не будет демоном, но вывод будет перенаправлен в файл. емнип, это необратимо
nohup python script.py &
Пробую: code=nohup python 1.py > logs.txt& но ничего не выходит
Хочу на наглядном примере просто понять, каким самым простым способом я могу запустить скрипт в фоне и писать его результат работы его в файл, и если мне необходимо то вернуть его снова из фона.
Используйте screen или tmux для такого.
Для прототипа и тестов как написали выше screen или tmux.
В продакшене лучше что-нибудь серьезное использовать вроде supervisor
А зачем возвращать в foreground? Если настроить логирование для stdout/err то результат работы можно прочитать из файла.
ЕМНИП, процесс тупо будет запущен в фоне, но прикреплён к тому же терминалу. При закрытии ssh сессии он будет убит, так что без nohup не катит
nohup если не пользуешься системным менеджером
… что полностью устраивает ТСа, не?
Задача: Хожу на сервер по ssh запускаю скрипт в фоне, который весь свой вывод в процессе работы ‘ложит’ в файл, скрипт должен работать бесконечно. Естественно я буду периодически переподключаться к серверу по ssh. Очень желательно иметь возможность вернуть скрипт из ‘фона’ каждый раз при подключении по ssh и посмотреть результат его работы в реальном времени.
Подвиду под общий знаменатель то что понял, у меня выбор один это использовать nohup, если я запускаю скрипт к примеру:
То данные сохраняется в файл только после завершении работы nohup(т.е после CTR+Z). Так на всем протяжении работы nohup файл logs.txt остается пустой. Вот скрипт с которым пробую: https://onlinegdb.com/SJiIda6hB
PS: Люди выше писали про screen и tmux, я вкурсе их существования и даже использую, но как они мне помогут запускать скрипт в фоне на удаленном сервере я не совсем понимаю.
выше писали про screen и tmux, я вкурсе их существования и даже использую, но как они мне помогут запускать скрипт в фоне на удаленном сервере я не совсем понимаю.
Как корректно запустить 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) нет вообще никаких сообщений о краше.
Подскажите каким образом запускать скрипт, чтобы он работал в фоне корректно или как отладить текущую ситуацию?
Русские Блоги
Несколько способов запуска скриптов 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 выполните следующую команду:
Интеллектуальная рекомендация
Механизм мониторинга в Vue
В повседневном развитии, мы можем часто передать значение переменной, чтобы контролировать определенную логику. Например, когда мой TEPM значение TRUE, мне нужно добавить переменную 1. Опять же, это б.
[leetcode]Count and Say
The count-and-say sequence is the sequence of integers with the first five terms as following: 1 is read off as «one 1» or 11. 11 is read off as «two 1s&qu.
SessionStorage, LocalStorage и cookie в JavaScript
SessionStorage, LocalStorage и cookie в JavaScript Добро пожаловать на мой блогЖелаю сельских соотечественниках, я собирался на вершину жизни, и я выйду замужем Bai Fumei
Как запустить python скрипт на ubuntu чтобы он не отключался?
Вариантов много, вот то, что придумал с ходу:
1. Запустить скрипт в bash с nohup.
2. Запускать скрипт в сессии tmux и просто детачиться из неё. Сессия продолжит работать. Это всё тот же ручной запуск скрипта.
3. Создать сервис systemd.
4. Запускать в фоне с помощью supervisor.
Если нужно, чтобы скрипт работал и запускался без участия человека, то варианты 3 и 4.
Systemd конечно оч. хорошо, но и Supervisor прекрасно справляется с такими задачами.
Я, например, и многие мои собратья по Проксе-Пепсика (на Python3) запускаем её, как раз через Supervisor, что весьма удобно.
Всё просто.
Сначала устанавливаете его:
sudo apt install supervisor
Если этого не сделать, то в папке /etc/supervisor будет лежать очень урезанный и бедный на настройки supervisord.conf файл и многие параметры придётся дописывать руками!
Судите сами:
— это урезанный файл после установки Supervisor
— а это полный файл со всеми параметрами, после его создания командой
Можно все настройки сделать в этом файле, но это не очень хороший тон!
Там же, в папке /etc/supervisor, после его (Supervisor) установки создаётся папка conf.d.
Полный путь:
/etc/supervisor/conf.d
Вот в неё-то, по правилам хорошего тона и ложат на каждый сервис/процесс отдельный Воркер/Юнит, в котором и прописывают запуск Python2/3 скрипта.
В моём случае:
Для примера, мои:
— конфигурационный файл supervisord.conf
— Воркер в /etc/supervisor/conf.d
Апосля всех правок конфигурационного файла и создания Воркера, обязательно перезапуск Supervisor:
И усё.
После каждого старта системы, всё будет работать.
Веб-морда Supervisor по адресу:
(доступна при условии, что у вас установлен веб-сервер)
http://localhost:9001/
Dr. Bacon, мне накидать вам холиваров о systemd, чтобы вам угодить?!
Также могу накидать холиваров и про Supervisor.
У Supervisor есть свои преимущества и Systemd по своему хорош и это тот самый случай, когда надо начинать мериться 3,14сюнами, у кого круче?!
Как вариант Supervisor и он нисколько не хуже Systemd.