Я запускаю PFA-скрипт на основе Python, который в основном пишет электронные таблицы после каждого часа. Работает хорошо. Я использую SSH на Putty для доступа к своему серверу и, следовательно, я использовал сеанс экрана для запуска сценария в фоновом режиме. Это работает хорошо в течение нескольких дней, а затем внезапно умирает. Прямо сейчас, это бежало в течение 6 дней подряд и умерло после. Использование Ubuntu 16.04.2 LTS (Xenial) в Digital Ocean.
Я использовал -
screen python we.py
blockquote>Я попытался найти, есть ли что-то, что может мне помочь из здесь . Нужно ли назначать какое-либо имя на экран, используя -S, чтобы избежать этого? Или мне нужно каждый день подключать его, используя -x или -p, чтобы сохранить его?
Существует два способа решить Вашу проблему:
Это кажется, что это - длительная задача, которая должна на самом деле быть сервисом, который начинает на начальной загрузке, перезапущен 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 в случае, если он перестал работать.
Программа Вы выполняете внутренний экран, вероятно, выходит, когда это произойдет, сессия закроется, и Вы освободите весь консольный вывод и код состояния.
Если бы Вы действительно хотите продолжать использовать экран для этого, я предложил бы нажать ctrl-a
затем shift-h
прежде, чем разъединиться с экрана для входа сессии. Файл называют screenlog.0
будет создан в рабочем каталоге, который содержит весь консольный вывод, надо надеяться, который может сказать Вам, почему Ваша программа выходит.