Продолжает запускаться программа python даже после выхода из ssh-сессии [дубликат]

На этот вопрос уже есть ответ здесь:

Я написал скрипт на python под названием scrape.py. Как следует из названия, это веб-краулер, и я хочу, чтобы он непрерывно выполнялся на моей Linux-машине даже после того, как я выйду из системы и завершу сеанс ssh. Я много читал здесь, и было много предложений использовать nohup python scrape.py &. Это сработало хорошо, но выполнение сценария прекратилось, как только я вышел из системы. Я также исследовал приложение supervisor, но у меня нет прав root, поэтому оно тоже не работает. Можете ли вы предложить мне способ решения этой проблемы? Спасибо.

2
задан 2 June 2017 в 18:42

1 ответ

Существует несколько подходов (инструменты и команды), что можно использовать для подобной цели:

  1. Используйте эмуляторы терминала как tmux и screen:

    • tmux - оконечный мультиплексор: это позволяет многим терминалам создаваться, получаться доступ и управляться от одного экрана. tmux может быть отсоединен с экрана и продолжить работать в фоновом режиме, затем позже повторно прикрепленный. Примеры его основного использования обеспечиваются здесь и здесь.

    • screen - экранируйте менеджер с эмуляцией терминала VT100/ANSI. Это - полноэкранный менеджер окон, который мультиплексирует физический терминал между несколькими процессами (обычно интерактивные оболочки)... Программы продолжают работать, когда их окно в настоящее время не видимо и даже когда целая экранная сессия отсоединяется от терминала пользователя. Пример использования обеспечивается здесь.

  2. Используйте отсоединенные команды, выполняемые в фоновом режиме (чтение также):

    • nohup - выполните команду, неуязвимую для зависаний с выводом к non-tty; КОМАНДА ВЫПОЛНЕНИЯ, игнорируя сигналы зависания. Общий синтаксис, чтобы отодвинуть команду на задний план и отсоединить его от текущей сессии оболочки: nohup COMMAND & или nohup COMMAND >/dev/null 2>&1 & если Вы хотите приостановить информационный файл, созданный nohup. Примеры его основного использования обеспечиваются здесь и здесь. Также здесь показан, как использовать его через команду ssh.

    • disown - подобный nohup но это - оболочка (zsh, ksh, удар) встроенный; используемый, чтобы удалить задания из таблицы задания или отметить задания так, чтобы сигнал SIGHUP не был отправлен им, если родительская оболочка получает его (например, если пользователь выходит из системы). Пример использования обеспечивается здесь.

    • setsid - создает сессию и устанавливает идентификатор группы процесса. Демонстрационное использование setsid "COMMAND". Больше примеров здесь.

  3. Используйте менеджеров по расписанию как at и crontab:

    • at - выполните команды в более позднее время; at и batch считайте команды из стандартного входа или указанного файла, которые должны быть выполнены в более позднее время, с помощью /bin/sh. Демонстрационное использование: echo "COMMAND" | at now + 1 minute. Больше примеров здесь.

    • crontab - запланируйте периодическую фоновую работу; это известно за другие цели, но Вы можете определенный определенный момент времени, когда Ваша команда будет выполняться только однажды. Хороший crontab калькулятор обеспечивается здесь.

  4. Создайте системную службу и запустите ее, см.:

7
ответ дан 2 December 2019 в 01:36

Другие вопросы по тегам:

Похожие вопросы: