Сеанс экрана, используемый для запуска Python PFA на сервере, через несколько дней умирает

Я запускаю PFA-скрипт на основе Python, который в основном пишет электронные таблицы после каждого часа. Работает хорошо. Я использую SSH на Putty для доступа к своему серверу и, следовательно, я использовал сеанс экрана для запуска сценария в фоновом режиме. Это работает хорошо в течение нескольких дней, а затем внезапно умирает. Прямо сейчас, это бежало в течение 6 дней подряд и умерло после. Использование Ubuntu 16.04.2 LTS (Xenial) в Digital Ocean.

Я использовал -

screen python we.py

Я попытался найти, есть ли что-то, что может мне помочь из здесь . Нужно ли назначать какое-либо имя на экран, используя -S, чтобы избежать этого? Или мне нужно каждый день подключать его, используя -x или -p, чтобы сохранить его?

0
задан 24 October 2017 в 10:35

2 ответа

Существует два способа решить Вашу проблему:

Выполните задачу как systemd сервис

Это кажется, что это - длительная задача, которая должна на самом деле быть сервисом, который начинает на начальной загрузке, перезапущен init системой, когда это перестало работать и должно иметь надлежащий вход к журналируемому.

Чтобы заставить это произойти, выполните эти шаги:

Создайте файл /lib/systemd/system/python-we.service и вставьте следующее содержание:

[Unit]
Description=Python We Job
After=network-online.target

[Service]
Type=simple
Restart=on-failure
RestartSec=10

ExecStart=/usr/bin/python /full/path/to/we.py

# Make sure stderr/stdout is captured in the systemd journal.
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

После создания файла, выполненного следующие команды для регистрации python-we.service файл к systemd, включите его (чтобы заставить его запуститься после перезагрузки) и наконец запустить его.

systemctl daemon-reload
systemctl enable python-we
systemctl start python-we

При использовании systemd, можно считать журналы через journalctl -u python-we.

Выполните его на экране (не рекомендуемый)

Запустите экранную сессию (просто тип screen) и на этом экране сессия запускают Ваше задание. Таким образом, экранная сессия только существует, если Вы закрываете оболочку в экранной сессии, и можно наблюдать журналы в экранной сессии.

Поскольку я сказал: Это не рекомендуемый способ выполнить сервис, так как это - вид hacky. Ваша экранная сессия чрезмерно увеличится в размерах, и сервис не будет автоматически restartet в случае, если он перестал работать.

1
ответ дан 2 November 2019 в 04:55

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

Если бы Вы действительно хотите продолжать использовать экран для этого, я предложил бы нажать ctrl-a затем shift-h прежде, чем разъединиться с экрана для входа сессии. Файл называют screenlog.0 будет создан в рабочем каталоге, который содержит весь консольный вывод, надо надеяться, который может сказать Вам, почему Ваша программа выходит.

0
ответ дан 2 November 2019 в 04:55

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

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