【问题标题】:Running a Service on Linux Raspbian在 Linux Raspbian 上运行服务
【发布时间】:2020-05-01 10:59:33
【问题描述】:

我希望在我的 Raspberry Pi 3 B+ 上启动时自动启动一个程序,运行 Raspbian Buster。该程序是用 Java 编写的(最初使用 Processing 创建,但可以使用 shell 脚本启动它。

我试图使用 systemctl 来执行此操作,并创建了 "reader.service",将其移至适当的文件夹,并使其能够在启动时启动。但是重新启动后没有迹象表明程序正在运行。 (它应该打开一个新窗口来显示程序正在运行,但什么也不做。)

检查服务返回状态

reader.service - Reader Service
Loaded: loaded(/etc/systemd/system/reader.service; enabled; vendor present: enabled)
Active: active (running) since Sat 2020-01-04 22:53:26 PST; 483ms ago
Main PID: 1039 (Reader_0_6)
Tasks: 9 (limit: 2200)
Memory: 5.5M
CGroup: /system.slice/reader.service

虽然使用终端或双击 shell 脚本本身确实可以成功启动程序。

为了完整起见,我将在下面包含实际的 reader.service 文件。

[Unit]
Description=Reader Service
After=network.target

[Service]
ExecStart=/home/pi/Desktop/Readerv0.6/application.linux64/Reader_0_6
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

我非常感谢任何回复,或朝着正确方向前进的提示,并且很乐意提供更多信息!

编辑: 按照建议进一步查看,我运行 sudo journalctl -f -u reader.service 以获取运行时的日志。它返回了以下内容。

systemd[1]: Started Reader Service.
Reader_0_6[19468]: Cannot run sketch without a display. Read this for possible solutions:
Reader_0_6[19468]: https://github.com/processing/processing/wiki/Running-without-a-Display
systemd[1]: reader.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: reader.service: Failed with result 'exit-code'.

但该链接提供了运行无头应用程序的解决方案,我对使用 Display 很感兴趣。我直接插入了HDMI,所以这应该不是问题。有没有办法在运行命令时传递 $DISPLAY ,并且在修改 reader.service 后改为说 After=graphical.target 它返回相同的日志。

【问题讨论】:

  • 你的程序是后台程序吗?你有你的Reader_0_6 的日志吗?如果是,请检查它们。
  • @DarkMatter 该程序目前不包含日志,但我会看到添加它们,以便能够进一步调查。该程序不是后台程序,因为它实际上应该在前台全屏打开。
  • @DarkMatter 我最终运行了 "journalctl -f -u reader.service" 来查看运行时的日志。返回已启动的阅读器服务。 Reader_0_6[19345]:没有显示器就无法运行草图。阅读此内容以获得可能的解决方案:(链接到 github)systemd[1]:reader.service:主进程退出,code=exited,status=1/FAILURE systemd[1]:reader.service:失败,结果为“exit-code” 所以看来这更多是 Processing 本身的问题,这是我用来创建 java 应用程序并将其导出到 Linux 的程序。

标签: java linux raspberry-pi processing systemctl


【解决方案1】:

很遗憾,默认情况下,服务未绑定到任何图形设备。

我最终做的事情很难找到:

[Service]
# ... other options ...
# Necessary:
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
# Bonus no black screen:
ExecStartPre=/usr/bin/xset -dpms
ExecStartPre=/usr/bin/xset s off
# Bonus stdout on Ctrl+Alt+F8:
StandardOutput=append:/dev/tty8

不幸的是,Chromium 现在会在此设置下崩溃,因此发生了一些变化。不过不知道你的程序会不会受到影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多