Продолжайте запускать программу на Python даже после выхода из сеанса SSH
Я Python скрипт называется scrape.py
, Как следует из названия, это веб-сканер, и я хочу, чтобы он непрерывно работал на моей машине с Linux даже после того, как я выйду из системы и завершу сеанс ssh. Я много читал здесь, и было много предложений по использованию nohup python scrape.py &
, Это работало хорошо, но выполнение скрипта прекратилось, как только я вышел из системы. Я также исследовал supervisor
приложение, но у меня нет прав root, поэтому оно тоже не работает. Можете ли вы предложить мне способ решить эту проблему? Спасибо.
1 ответ
Существует несколько подходов (инструментов и команд), которые вы можете использовать для аналогичных целей:
Используйте эмуляторы терминала в качестве
tmux
а такжеscreen
:tmux
- мультиплексор терминала: он позволяет создавать, получать доступ и управлять несколькими терминалами с одного экрана.tmux
может быть отсоединен от экрана и продолжать работать в фоновом режиме, а затем снова подключен. Примеры его основного использования приведены здесь и здесь.screen
- менеджер экрана с эмуляцией терминала VT100/ANSI. Это полноэкранный диспетчер окон, который мультиплексирует физический терминал между несколькими процессами (обычно интерактивными оболочками)... Программы продолжают работать, когда их окно в данный момент не видно и даже когда весь сеанс экрана отсоединен от пользовательского терминала. Пример использования приведен здесь.
Используйте отдельные команды, выполняемые в фоновом режиме ( читайте также):
nohup
- запустить команду, невосприимчивую к зависаниям, с выводом не-tty; Запустите КОМАНДУ, игнорируя сигналы зависания. Общий синтаксис для перевода команды в фоновый режим и отсоединения ее от текущего сеанса оболочки:nohup COMMAND &
или жеnohup COMMAND >/dev/null 2>&1 &
если вы хотите приостановить инфо-файл, созданныйnohup
, Примеры его основного использования приведены здесь и здесь. Также здесь показано, как использовать его с помощью команды ssh.disown
- похожий наnohup
но это встроенная оболочка (zsh, ksh, bash); используется для удаления заданий из таблицы заданий или для пометки заданий, чтобы сигнал SIGHUP не отправлялся им, если родительская оболочка его получает (например, если пользователь выходит из системы). Пример использования приведен здесь.setsid
- создает сеанс и устанавливает идентификатор группы процессов. Пример использованияsetsid "COMMAND"
, Больше примеров здесь.
Используйте диспетчеры расписаний в качестве
as
а такжеcrontab
:at
- выполнять команды позднее;at
а такжеbatch
читать команды из стандартного ввода или указанного файла, которые должны быть выполнены позже, используя/bin/sh
, Пример использования:echo "COMMAND" | at now + 1 minute
, Больше примеров здесь.crontab
- график периодической фоновой работы; это хорошо известно для других целей, но вы можете указать определенный момент времени, когда ваша команда будет выполнена только один раз. Хороший калькулятор crontab предоставляется здесь.
Создайте системный сервис и запустите его, см.: