'pygame script runs fine from command line, but fails in service

Having been facing an issue for past many days - searched a lot on the internet, and tried various options but none worked hence this post.

in brief, I have a python script which works just fine from the command line on a raspberry pi zero, however, when executing same a service it keeps getting killed or terminates. Haven't been able to determine why

Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: Enqueued job pyGameDisplay.service/restart as 4267
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=1 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=1619 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=JobNew cookie=2 reply_cookie=0 signature=uos error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=JobNew cookie=1620 reply_cookie=0 signature=uos error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=method_return sender=org.freedesktop.systemd1 destination=n/a path=n/a interface=n/a member=n/a cookie=3 reply_cookie=1 signature=o error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: home.mount: Collecting.
Apr  4 16:38:16 zeropi systemd[1]: home-sundeep.mount: Collecting.
Apr  4 16:38:16 zeropi systemd[1]: home-sundeep-display.mount: Collecting.
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=4 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=1621 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitRemoved cookie=5 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitRemoved cookie=1622 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=6 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=1623 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitRemoved cookie=7 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitRemoved cookie=1624 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=8 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=1625 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitRemoved cookie=9 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitRemoved cookie=1626 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=10 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=UnitNew cookie=1627 reply_cookie=0 signature=so error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Got message type=method_call sender=n/a destination=org.freedesktop.systemd1 path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=GetUnit cookie=2 reply_cookie=0 signature=s error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=method_return sender=org.freedesktop.systemd1 destination=n/a path=n/a interface=n/a member=n/a cookie=11 reply_cookie=2 signature=o error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: Job 4267 pyGameDisplay.service/restart finished, result=done
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: Converting job pyGameDisplay.service/restart -> pyGameDisplay.service/start
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: Passing 0 fds to service
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: About to execute: /usr/bin/python3 /home/sundeep/display/pyGameDisplay.py
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: Forked /usr/bin/python3 as 7477
Apr  4 16:38:16 zeropi systemd[7477]: pyGameDisplay.service: Executing: /usr/bin/python3 /home/sundeep/display/pyGameDisplay.py
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=12 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=13 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1628 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1629 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: Changed dead -> running
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: Job 4267 pyGameDisplay.service/start finished, result=done
Apr  4 16:38:16 zeropi systemd[1]: Started pyGameDisplay.
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=14 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=15 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1630 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1631 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=JobRemoved cookie=16 reply_cookie=0 signature=uoss error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=JobRemoved cookie=1632 reply_cookie=0 signature=uoss error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=17 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=18 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1633 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1634 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: pyGameDisplay.service: User lookup succeeded: uid=0 gid=0
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=19 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=org.freedesktop.systemd1 destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=20 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1635 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1636 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Got message type=method_call sender=n/a destination=org.freedesktop.systemd1 path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=Get cookie=3 reply_cookie=0 signature=ss error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Sent message type=method_return sender=org.freedesktop.systemd1 destination=n/a path=n/a interface=n/a member=n/a cookie=21 reply_cookie=3 signature=v error-name=n/a error-message=n/a
Apr  4 16:38:16 zeropi systemd[1]: Bus private-bus-connection: changing state RUNNING → CLOSING
Apr  4 16:38:16 zeropi systemd[1]: Bus private-bus-connection: changing state CLOSING → CLOSED
Apr  4 16:38:16 zeropi systemd[1]: Got disconnect on private connection.
Apr  4 16:38:26 zeropi systemd[1]: Received SIGCHLD from PID 7477 (python3).
Apr  4 16:38:26 zeropi systemd[1]: Child 7477 (python3) died (code=killed, status=1/HUP)
Apr  4 16:38:26 zeropi systemd[1]: pyGameDisplay.service: Child 7477 belongs to pyGameDisplay.service.
Apr  4 16:38:26 zeropi systemd[1]: pyGameDisplay.service: Main process exited, code=killed, status=1/HUP
Apr  4 16:38:26 zeropi systemd[1]: pyGameDisplay.service: Succeeded.
Apr  4 16:38:26 zeropi systemd[1]: pyGameDisplay.service: Changed running -> dead
Apr  4 16:38:26 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1637 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:26 zeropi systemd[1]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/systemd1/unit/pyGameDisplay_2eservice interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=1638 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr  4 16:38:26 zeropi systemd[1]: pyGameDisplay.service: Changed dead -> auto-restart

the unit file is


[Unit]
Description = pyGameDisplay
After = multi-user.target syslog.target network.target network-online.target graphical.target

[Service]
Type=simple
Environment="DISPLAY=:0"
#Environment="XAUTHORITY=/home/pi/.Xauthority"
#Type=notify
Restart=always
#Restart= on-failure
WorkingDirectory=/home/sundeep/display/
ExecStart =/usr/bin/python3 /home/sundeep/display/pyGameDisplay.py
RestartSec = 90
TimeoutStartSec = 69
StandardOutput=append:/var/log/pyDisplay/stdout.log
StandardError=append:/var/log/pyDisplay/stderror.log
SyslogIdentifier=pyGameDisplay
SendSIGHUP=no
KillMode = process
User=root

[Install]
WantedBy = multi-user.target

please advise how to debug this further.



Solution 1:[1]

I think its finally solved.

moved the following code way up in the script

def handler(signum, frame):
    """Why is systemd sending sighups? I DON'T KNOW."""
    # logging.debug("Got a {} signal.Exiting !!!!".format(signum))

    if signum == signal.SIGTERM:
        logging.debug("Got a {} signal.Exiting !!!!".format(signum))
        pygame.display.quit()
        pygame.quit()
        exit()
    else:
        logging.debug("Got a {} signal. Doing nothing".format(signum))

More importantly moved following up in the code which were earlier a bit further down.

        signal.signal(signal.SIGHUP, handler)
        signal.signal(signal.SIGTERM, handler)
        signal.signal(signal.SIGCONT, handler)

I think because of this signal are getting trapped in time, preventing exit

08:50:36,199 root DEBUG Got a 1 signal. Doing nothing
08:50:36,201 root DEBUG Got a 18 signal. Doing nothing

Albeit - I do get following first time I start the service

08:50:09,959 root DEBUG Got a 15 signal.Exiting !!!!```

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sundeep Goel