Экранная сессия, используемая для запуска 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

6 ответов

Существует два способа решения вашей проблемы:

Запуск задачи в качестве службы systemd

Похоже, что это долго работающая задача, которая на самом деле должна быть службой, которая получает (! d2)

Чтобы это произошло, выполните следующие действия:

Создайте файл /lib/systemd/system/python-we.service

Создайте файл /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.

Запустить его на экране (не рекомендуется)

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

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

1
ответ дан 22 May 2018 в 18:00
  • 1
    После нескольких минут фиджинга я смог заставить его работать как услуга. – SanVed 26 October 2017 в 15:48
  • 2
    Круто! Вы поступаете правильно. :) – malte 26 October 2017 в 15:57

Существует два способа решения вашей проблемы:

Запуск задачи в качестве службы systemd

Похоже, что это долго работающая задача, которая на самом деле должна быть службой, которая получает (! d2)

Чтобы это произошло, выполните следующие действия:

Создайте файл /lib/systemd/system/python-we.service

Создайте файл /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.

Запустить его на экране (не рекомендуется)

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

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

1
ответ дан 18 July 2018 в 06:01

Существует два способа решения вашей проблемы:

Запуск задачи в качестве службы systemd

Похоже, что это долго работающая задача, которая на самом деле должна быть службой, которая получает (! d2)

Чтобы это произошло, выполните следующие действия:

Создайте файл /lib/systemd/system/python-we.service

Создайте файл /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.

Запустить его на экране (не рекомендуется)

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

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

1
ответ дан 24 July 2018 в 18:30

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

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

0
ответ дан 22 May 2018 в 18:00

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

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

0
ответ дан 18 July 2018 в 06:01

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

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

0
ответ дан 24 July 2018 в 18:30

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

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