Я пытаюсь запустить скрипт pygame python с systemd, и по какой-то причине сценарий просто выходит без ошибки. Это на малиновой пи с распятым «Jessie lite».pygame.init() не работает при запуске с systemd
Если я запускаю сценарий вручную с помощью «sudo python myscript.py», он отлично работает.
Судо systemctl отчеты Статус myscript.service:
* myscript.service - Python Script
Loaded: loaded /etc/systemd/system/myscript.service; enabled) Active: inactive (dead) since Mon 2016-08-29 04:33:19 UTC; 1s ago
Process: 3275> ExecStart=/usr/bin/python /home/pi/myscript.py (code=killed, signal=HUP)
Main PID: 3275 (code=killed, signal=HUP)
Если я запустить службу вручную с Судо systemctl начинают myscript.service то же самое происходит.
Я удалил свой скрипт только для вызова pygame.init(). Здесь он выходит.
Если я пытаюсь инициализировать модули вручную, тогда «cdrom», «joystick», «threads» и «font» инициализируются нормально, но вызов display.init() заставляет программу выйти. Исключено исключение.
Единственный ресурс, который я мог найти в Интернете, - this guy. Кажется, он столкнулся с тем же, что и я. Я пробовал strace, и если я подожду достаточно долго (2 минуты), это сработает! Очевидно, я не могу работать с strace все время. Я думаю, что это замедляет выполнение инициализации, чтобы каким-то образом позволить ей работать.
EDIT: Таким образом, проблема заключается в отправке системы SIGHUP. Если это не обрабатывается в Python, действие по умолчанию - выйти. Быстрое исправление является фиксацией SIGHUP:
import signal
def handler(signum, frame):
pass
try:
signal.signal(signal.SIGHUP, handler)
except AttributeError:
# Windows compatibility
pass
Так много горящих вопросов. Почему systemd это делает? Почему strace исправляет проблему? Почему некоторые скрипты Python получают SIGHUP, а другие нет?
Звучит как ошибка или проблема с конфигурацией. Systemd не должен посылать 'SIGHUP', если не указано через' SendSIGHUP = 'или' KillSignal = '... – dhke