как сохранить выполнение сценария python, когда я закрываю шпатлевку

вы можете использовать nvidia-driver на latop с optimus. Bumblebee-nvidia для моего случая на MSI GP62 6QF не лучшее решение, потому что моя графика intel по производительности равна моей карте nvidia с bumblebee-nvidia. И когда я использовал только nvidia-драйвер, моя карта была намного лучше в LinuxMint

19
29.04.2017, 17:21
3 ответа

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

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

Использование:

$ screen

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

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

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

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

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

[Unit]
Description=MyPythonScript

[Service]
ExecStart=/usr/bin/myPythonScript

[Install]
WantedBy=multi-user.target

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

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

# systemctl enable myPythonScript

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

# systemctl status myPythonScript

Объявление о том, что вы можете просматривать логи вашего скрипта

# journalctl -u myPythonScript -e

2
27.01.2020, 19:44

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

Обратите внимание, что ping example.com 1>/dev/null &выполняет свою работу.

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

РЕДАКТИРОВАТЬ: как написано в этот ответ убивает процессы systemd при выходе из системы. Некоторые версии systemdубивают процессы при выходе из системы по умолчанию, другие — нет. Это поведение можно изменить, изменив /etc/systemd/logind.conf, установив следующую опцию. Как написано, это также может решить некоторые проблемы, которые могут возникнуть у вас с решениями @terdon.

из man logind.conf:

KillUserProcesses=

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

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

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

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

1
27.01.2020, 19:44

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

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

     nohup pythonScript.py
     

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

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

     tmux
    pythonScript.py
     

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

40
27.01.2020, 19:44

Теги

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