手动执行时程序启动正常,但通过 systemd 服务默默失败

问题描述 投票:0回答:1

我有一个 C++ 应用程序,可以手动运行,但在由 systemd 服务运行时失败且没有错误消息。为什么会出现这种情况?

我自己就可以运行该程序:

$ DISPLAY=:0 /home/pi/myApp/myApp &

但是当我通过 systemd 服务执行此操作时,它不会启动。执行链是:

kiosk.service -> kiosk.sh -> myApp

这是我的 systemd 服务(kiosk.service):

[Unit]
Description=Run app in kiosk mode
Wants=graphical.target
After=graphical.target

[Service]
ExecStartPre=/bin/sleep 20
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/pi/.Xauthority
Type=simple
ExecStart=/bin/bash /home/pi/kiosk.sh
Restart=on-abort
User=pi
Group=pi

[Install]
WantedBy=graphical.target

这是运行我的应用程序的 kiosk.sh:

#!/bin/bash

# This script has been adapted from: https://pimylifeup.com/raspberry-pi-kiosk/

# Disable screensaver / blank screen due to inactivity
xset s noblank
xset s off
xset -dpms

# Hide mouse cursor using the unclutter program
DISPLAY=:0 unclutter -idle 0.5 -root &

# Launch of app with our params
DISPLAY=:0 /home/pi/myApp/myApp &

$ systemctl status kiosk.service
说:

○ kiosk.service - Launch app in kiosk mode
     Loaded: loaded (/lib/systemd/system/kiosk.service; enabled; preset: enabled)
     Active: inactive (dead) since Wed 2023-12-27 19:10:13 EST; 5min ago
   Duration: 48ms
   Main PID: 1483 (code=exited, status=0/SUCCESS)
        CPU: 54ms

Dec 27 19:09:53 raspberrypi systemd[1]: Starting kiosk.service - Launch app in kiosk mode...
Dec 27 19:10:13 raspberrypi systemd[1]: Started kiosk.service - Launch app in kiosk mode.
Dec 27 19:10:13 raspberrypi systemd[1]: kiosk.service: Deactivated successfully.

如果我这样做了

$ sh /home/pi/kiosk.sh
它也运行得很好,所以我的shell启动器脚本似乎没有任何问题。

我在想当从 systemd 服务执行程序时,某些环境变量上下文会发生变化?有什么想法吗?

linux service raspberry-pi systemd
1个回答
0
投票

无需在后台运行应用程序。所有 systemd 服务都作为守护进程运行。所以删除

&
之后的
MyApp

您的应用程序显然依赖于不在标准位置的库,您需要设置

LD_LIBRARY_PATH
环境变量。所以添加

Environment="LD_LIBRARY_PATH=/home/pi/myApp/libs:/usr/local/lib:/usr/lib:/lib"

前往

[Service]
部分。

© www.soinside.com 2019 - 2024. All rights reserved.