как сохранить скрипт python при закрытии шпатлевки

Я собираюсь запустить скрипт python на Ubuntu на VPS. Это тренировочный процесс машинного обучения, поэтому требуется огромное время для обучения. Как я могу закрыть шпатлевку, не останавливая этот процесс.

3 Solutions collect form web for “как сохранить скрипт python при закрытии шпатлевки”

У вас есть два основных варианта:

  1. Запустите команду с nohup . Это отключит его от сеанса и продолжит работу после отключения:

     nohup pythonScript.py 

    Обратите внимание: команда stdout будет добавлена ​​в файл с именем nohup.out если вы не перенаправите его ( nohup pythonScript.py > outfile ).

  2. Используйте мультиплексор экрана, например, tmux . Это позволит вам отключиться от удаленной машины, но затем, в следующий раз, когда вы подключитесь, если вы снова запустите tmux attach , вы окажетесь в точно таком же сеансе. Команда все равно будет работать (она будет продолжать работать при выходе из системы), и вы сможете увидеть ее stdout и stderr так же, как если бы вы никогда не выходили из системы:

     tmux pythonScript.py 

    Когда вы запустите это, просто закройте окно PuTTY. Затем снова подключитесь на следующий день, снова запустите tmux attach и вы вернетесь туда, где вы начали.

Большинство процессов можно обмануть, перенаправляя его stdout, stderr, stdin (не все дескрипторы всегда необходимы для перенаправления) и с помощью & control operator.

Посмотрите, что ping example.com 1>/dev/null & выполняет задание.

Конечно, некоторые программы более сложны и требуют таких решений, как упомянуто в @terdon, но хорошо знать и использовать то, что подходит лучше всего.

EDIT: как написано в этом ответе, он убивает systemd процессы при выходе из системы. Некоторые версии systemd убивают процессы при выходе из системы по умолчанию, другие – нет. Это поведение можно изменить, изменив /etc/systemd/logind.conf, установив следующий параметр. Как написано, он также может решить некоторые проблемы, которые могут возникнуть с решениями @ terdon.

от man logind.conf :

KillUserProcesses=

Принимает логический аргумент. Настраивает, должны ли быть убиты процессы пользователя при выходе пользователя из системы. Если значение true, то область охвата, соответствующая сеансу, и все процессы внутри этой области действия будут прекращены. Если false, область действия «заброшена», см. Systemd.scope (5), и процессы не будут уничтожены. По умолчанию «да», но см. KillOnlyUsers= и KillExcludeUsers= ниже.

В дополнение к сеансовым процессам пользовательский процесс может выполняться под пользовательским модулем user @ .service. В зависимости от настроек задержки это может позволить пользователям запускать процессы независимо от их сеансов входа в систему. См. Описание enable-linger loginctl в loginctl (1).

Обратите внимание, что установка KillUserProcesses=yes приведет к поломке таких инструментов, как screen (1) и tmux (1), если они не будут перемещены из области сеанса. См. Пример в systemd-run (1).

Прочтите связанный ответ, чтобы узнать больше.

Это поддерживает screen инструмент, доступный для всех дистрибутивов Linux.

Чтобы установить его, запустите apt-get install screen для deb-based дистрибутивов Linux или dnf install -y screen или yum install -y screen для RPM-совместимых.

Использовать:

$ screen

Запускается новая оболочка. В этой оболочке вы можете запустить свой скрипт Python. Затем вы можете нажать Ctrl + Shift + A, затем D. Он отсоединит ваш терминал от оболочки, на которой запущен ваш скрипт. Кроме того, скрипт все еще работает в нем.

Чтобы узнать, как работает ваш скрипт, вы можете вызвать screen -r . Это вернет ваш терминал в оболочку с помощью скрипта Python, который вы оставили в фоновом режиме.

UPD: как упоминал Фокс, экран плохо работает с systemd, но мы можем использовать systemd для запуска скрипта, как говорят в официальном примере .

Например, если ваш скрипт запущен /usr/bin/myPythonScript , вы можете создать файл /usr/bin/myPythonScript , как это.

$ cat /etc/systemd/system/myPythonScript.service

 [Unit] Description=MyPythonScript [Service] ExecStart=/usr/bin/myPythonScript [Install] WantedBy=multi-user.target 

# systemctl daemon-reload вы можете запустить этот скрипт # systemctl daemon-reload # systemctl start myPythonScript

Если вы хотите, чтобы этот скрипт запускался автоматически при запуске системы –

# systemctl enable myPythonScript

В любое время вы можете посмотреть, как работает ваш скрипт

# systemctl status myPythonScript

В объявлении вы можете просмотреть журналы своего скрипта

# journalctl -u myPythonScript -e

  • Порты FreeBSD Broken - проблема с Python? Портмастер -а
  • PIP сохраняет день на Fedora 25 для No module с именем «PyQt5.QtWebEngineWidgets» ошибка..WHY?
  • ImportError при запуске приложения WSGI в Apache: undefined symbol: PyUnicodeUCS2_DecodeUTF8
  • Как проверить и запустить скрипт, если он не запущен?
  • Какой язык сценариев или платформа использовать для загрузки веб-страниц и взаимодействия с экраном?
  • Как успешно выйти из сценария оболочки, чтобы подпроцесс python считал, что он успешно выходит?
  • Использование разных версий Python
  • как создать отдельный процесс в фоновом режиме при запуске переднего плана
  • Vim: сводка кода на питоне не отличается от кода C / C ++
  • Отладка запущенного процесса python
  • Профилирование памяти, диска, процессора и времени из python
  • Interesting Posts

    Почему оболочка рыбы должна начать процесс демона?

    Поймайте все электронные письма и сохраните их в MySQL

    Остановить выполнение, когда что-то написано в stderr

    установите umask (разрешения) аналогично setgid в каталоге

    Scanimage работает, но Xsane или любой другой пользовательский интерфейс не

    скользящий diff для хранения очень похожих файлов?

    Как получить «нулевое время простоя» на HAProxy с конфигурацией балансировки нагрузки?

    Итерация через аргументы командной строки в Bash

    howto inflate И извлеките .tar.bz2 с помощью инструмента командной строки 7-zip

    Как узнать узел устройства, соответствующий моему устройству в SuSE 8?

    Интерфейс совместимости Sendmail

    Почему bash 4.3 сохраняет выделение памяти в скрипте

    Dmenu не запускает некоторые программы (например, emacs) – есть ли файл журнала?

    Как я могу заставить irssi-proxy отправлять мне пропущенные упоминания, когда я подключаюсь?

    Как проверить функцию UPSTART для ubuntu, чтобы увидеть, как мой скрипт автоматически перезапускается, если он убит?

    Linux и Unix - лучшая ОС в мире.