【发布时间】: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