Продолжайте запускать программу на Python даже после выхода из сеанса SSH

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

1 ответ

Решение

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

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

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

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

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

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

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

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

  3. Используйте диспетчеры расписаний в качестве as а также crontab:

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

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

  4. Создайте системный сервис и запустите его, см.:

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