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