python pygame 스크립트를 시스템 서비스로 실행하는 방법은 무엇입니까?

python pygame 스크립트를 시스템 서비스로 실행하는 방법은 무엇입니까?

부팅 시 최대한 빨리 Raspberry Pi에서 Python PyGame 스크립트를 실행하고 싶습니다. 스크립트 자체는 PyGame 및 PySerial 모듈에 의존합니다.

원하는 결과를 얻기 위해 Python 스크립트를 서비스로 래핑하고 systemd에 대한 구성을 만들기로 결정했습니다.

그러나 안타깝게도 이러한 조건에서는 스크립트가 제대로 작동하지 않습니다. pygame.display.init() 행에서 실행이 중단됩니다. 전체 부팅 프로세스가 완료된 후에도 systemctl을 통해 서비스를 다시 시작했지만 동작은 어떤 식으로든 변경되지 않았습니다.

서비스를 처음 만드는 것이므로 매우 명백한 실수를 저지르고 있을 수도 있습니다. 하지만 여기서 무엇이 잘못되었고 왜 systemd에서 이 스크립트를 성공적으로 실행할 수 없는지 알려주실 수 있습니까?

다음은 축소된 main.py입니다.

import os
import pygame

if __name__ == "__main__":
    print 'Starting IC app ...'
    print 'Environment variables:'
    print os.environ
    print 'Starting pygame initialization'
    pygame.display.init()
    print 'pygame display module initialized'
    pygame.font.init()
    print 'pygame font module initialized'

.service 파일은 다음과 같습니다.

[Unit]
Description=IC service
StartLimitIntervalSec=0
Before=dhcpcd.service
Wants=dhcpcd.service

[Service]
Type=simple
Restart=on-abort
RestartSec=1
SendSIGHUP=no
User=root
Environment="NO_AT_BRIDGE=1" "PYTHONUNBUFFERED=1" "DISPLAY=:0"
ExecStart=/usr/bin/python /home/pi/ic/src/main.py
StandardOutput=journal+console
StandardError=journal+console

[Install]
WantedBy=multi-user.target

다음은 SSH를 통해 루트로 실행할 때의 스크립트 출력입니다(예상대로 작동함).

root@raspberrypi:/home/pi/ic/src# python main.py 
Starting IC app ...
Environment variables:
{'NO_AT_BRIDGE': '1', 'LOGNAME': 'root', 'USER': 'root', 'HOME': '/root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'DISPLAY': ':0', 'LANG': 'en_GB.UTF-8', 'TERM': 'xterm', 'SHELL': '/bin/bash', 'SHLVL': '1', 'SUDO_USER': 'pi', 'USERNAME': 'root', 'SUDO_UID': '1000', 'SDL_VIDEO_X11_WMCLASS': 'main.py', '_': '/usr/bin/python', 'SUDO_COMMAND': '/bin/su', 'SUDO_GID': '1000', 'PWD': '/home/pi/ic/src', 'MAIL': '/var/mail/root'}
Starting pygame initialization
pygame display module initialized
pygame font module initialized

다음은 Journalctl에서 얻은 스크립트 출력입니다.

systemd[1]: Started IC service.
python[1217]: Starting IC app ...
python[1217]: Environment variables:
python[1217]: {'LANG': 'en_GB.UTF-8', 'NO_AT_BRIDGE': '1', 'TERM': 'linux', 'SHELL': '/bin/sh', 'JOURNAL_STREAM': '8:17484', 'SDL_VIDEO_X11_WMCLASS': 'main.py', 'LOGNAME': 'root', 'USER': 'root', 'HOME': '/root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'PYTHONUNBUFFERED': '1', 'DISPLAY': ':0', 'INVOCATION_ID': '2e02b3153baf4ab9be43b66157980bcb'}
python[1217]: Starting pygame initialization

런타임 중 환경 변수와의 시각적 차이점(왼쪽은 SSH, 오른쪽은 systemd) 여기에 이미지 설명을 입력하세요.

관련 정보