Intereting Posts
Разрешить проблему разрешения cifs в глубоком каталоге, возможно, из-за разделения UNC и prefixpath Не удается смонтировать жесткий диск EXT4 после установки в окнах Как узнать, есть ли я в тюрьме, контейнере, снимке и т. Д. Окружении? Нужно ли клиентам CUPS устанавливать PPD локально? Профили Gconf, персонализированные с переменными среды Сценарий Ubuntu Remap для беспроводной клавиатуры Logitech от Cordless Wave Как запустить Java-процесс, который будет рассматриваться не как «java …» в списке процессов? GRUB: отправка заказов в GRUB в другой раздел Автоматическая перекомпиляция ядра на патчи безопасности? Найти команду: путь к файлу vs -name Аргумент ArchLinux: Ошибка установки grub на зашифрованном разделе lvm (lvm on luks) В чем разница между установкой пределов открытых файлов в файле /etc/sysctl.conf vs /etc/security/limits.conf? Как определить, какие каталоги находятся в другой файловой системе? Командная строка: как вы поворачиваете файл PDF на 90 градусов? Bash для вызова PHP, дождитесь завершения процесса PHP?

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

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

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

  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