Продолжайте выполнение программы, требующей X-сервера после выхода из сеанса ssh

У меня есть скрипт python, который периодически генерирует png-образ и помещает его на сервер, доступ к которому я могу получить через браузер. На изображении отображается ход выполнения задания, которое я запускаю на сервере. Я использую matplotlib для генерации изображений.

Сценарий python переходит в режим сна после генерации каждого изображения. Через час он просыпается, генерирует новое изображение, а затем снова заснул.

Я запускаю скрипт через сеанс ssh. Когда я выхожу из системы, сценарий убивается. Я прочитал другие темы, посвященные этой проблеме, но предлагаемые решения не работают. Сценарий убивается после выхода из системы, даже если я запускаю его с помощью

nohup script.py &> job-monitor.log & 

или если я запускаю его так

 script.py [Ctrl-Z] disown -h %1 bg 1 

Странная вещь, когда я выхожу из системы и снова заходила туда, сценарий больше не работает, а job-monitor.log пуст.

Что может случиться, и как заставить скрипт продолжать работу после выхода из системы?

Дополнительная информация: Я думаю, что проблема связана с библиотекой закладок, которую я использую, matplotlib. Я думаю, для этого может потребоваться X-сессия для создания png, хотя графический объект просто сохраняется на диске.

4 Solutions collect form web for “Продолжайте выполнение программы, требующей X-сервера после выхода из сеанса ssh”

Если проблема связана с matplotlib (т. Е. Ваш сценарий никогда не дает ответа, если вы остаетесь на связи, или он работает, потому что ssh перенаправляет ваше соединение Xwindow), вы должны вставить свой файл matplotlibrc:

 backend : AGG 

Таким образом, скрипту не нужно работать Xwindow.

Вместо IO/redirecting используйте screen command tmux или screen command для мониторинга сеанса.

Могу ли я смиренно предложить вам отбросить часть time.sleep() из вашего скрипта и использовать либо cron либо at для периодических и / или задержанных вызовов?

Это упрощает ваш код, безопасно удаляет зависимости от сеанса сеанса ssh и отделяет проблемы генерации и планирования изображений.

Что касается умирающего сценария: я подозреваю, что сценарий после nohup может не иметь права на запись в файл журнала, либо потому, что ему не хватает права на запись в каталог, где вы его запускаете, либо потому, что существующий файл журнала принадлежит, например, root и, следовательно, недоступен ,

Я не знаю, следует ли отказаться от работы, а затем попытаться вызвать bg против нее. Я всегда делаю обратное: foo & disown %1 ; он работает именно в таких обстоятельствах, как ваш.

Попробуйте перенаправить STDIN. Возможно, скрипт читает из stdin, поэтому, когда вы закрываете оболочку, stdin уходит, и он умирает.

 script.py </dev/null &>/dev/null & disown 
  • Как относятся номера каналов в сообщении об ошибке ssh?
  • sshfs: тип файла отличается от точки монтирования
  • Как запустить telnet через SSH?
  • Как выйти из всех активных сеансов?
  • Пересылка IP через туннель ssh
  • Использовать оболочку, не установленную на удаленном компьютере
  • Не удается выполнить ssh на удаленную машину, используя сценарий оболочки в Crontab
  • Невозможно отменить перенаправление портов с помощью SSH в качестве временного пользователя
  • Резервное копирование с помощью find и ssh для сервера вне сайта
  • Как запустить автозаполнение без клавиши табуляции?
  • Какой смысл в протоколе рыб?
  • Interesting Posts

    Distros, которые поддерживают компиляцию из источника

    start-stop-daemon не был написан файл pid

    USB-установка Linux Mint – отображается только как один раздел, но у меня закончилось свободное пространство

    Разрешения монтирования в Linux

    SSH через PuTTY: запуск gnome-session и gnome-panel в одном окне

    Есть ли возможность отправлять файлы ядра в удаленное место, не сохраняя их локально?

    Ошибка при загрузке: Codepage не найден

    Как проверить успех установки IDEA с помощью CLI на виртуальной машине?

    Поиск только одного слова в Unix

    Почему файл exec генерирует 4 процесса в Linux?

    команда «find … -exec mv …» создала файл со странным контентом

    Как добавить строку в файл, который имеет только права на запись в root и продолжить выполнение скрипта

    Может sudo для пользователя, но «запустить команду как» отказано?

    Chromium os не загружается

    Условные утверждения: поиск папок, которые не содержат определенного файла

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