正确运行 systemd 服务文件的问题

正确运行 systemd 服务文件的问题

我有一个 GUI 程序,可以使用以下命令从终端运行,没有任何问题:

$ /home/user1/ibg/ibg username=*** password=***

通过上述命令,程序 GUI 显示,自动登录我的在线帐户,我可以使用 python 脚本通过端口 4002 与他们的服务器通信并成功请求数据。没有任何问题。

我想systemd在 ubuntu 中为上述命令创建一个服务。我写的服务文件如下(放在/etc/systemd/system):

[Unit]
Description=ibg service
After=network.target

[Service]
Type=simple
Environment=DISPLAY=:0
ExecStart=/home/user1/ibg/ibg username=**** password=****

[Install]
WantedBy=multi-user.target

但是,该服务无法成功运行。

user1@SFO:~$ sudo systemctl status ibg.service
● ibg.service - ibg service
   Loaded: loaded (/etc/systemd/system/ibg.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2020-08-18 22:13:07 PDT; 3s ago
  Process: 27951 ExecStart=/home/user1/ibg/ibg username=**** password=**** (code=exited, status=1/FAILURE)
 Main PID: 27951 (code=exited, status=1/FAILURE)

Aug 18 22:13:07 SFO ibg[27951]:         at java.security.AccessController.doPrivileged(Native Method)
Aug 18 22:13:07 SFO ibg[27951]:         at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854)
Aug 18 22:13:07 SFO ibg[27951]:         at java.awt.Toolkit.getEventQueue(Toolkit.java:1734)
Aug 18 22:13:07 SFO ibg[27951]:         at java.awt.EventQueue.invokeLater(EventQueue.java:1266)
Aug 18 22:13:07 SFO ibg[27951]:         at com.exe4j.runtime.LauncherEngine.handleFailure(LauncherEngine.java:140)
Aug 18 22:13:07 SFO ibg[27951]:         at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:94)
Aug 18 22:13:07 SFO ibg[27951]:         at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:66)
Aug 18 22:13:07 SFO ibg[27951]:         at install4j.ibg.GWClient.main(Unknown Source)
Aug 18 22:13:07 SFO systemd[1]: ibg.service: Main process exited, code=exited, status=1/FAILURE
Aug 18 22:13:07 SFO systemd[1]: ibg.service: Failed with result 'exit-code'.

有人可以帮助我如何找出问题所在吗? status 命令没有提供服务无法运行的原因。有什么方法可以获取有关失败的更多信息吗?运行 GUI 的命令行版本与我创建的服务有什么区别?我正在使用完全相同的命令来运行它ExecStart

答案1

由于它是一个图形应用程序,我怀疑这个答案可能对您有帮助:

在 systemd 服务文件中设置 DISPLAY

当您的服务文件运行图形应用程序时,您会遇到一些问题。

如果你想将其保留为系统服务:

  • 它是WantedBy=multi-user.target。我建议更改为WantedBy=graphical.target和 ,After=graphical.target这只能在显示管理器启动后发生。但是,这可能仍然是一个问题,因为它可能会在您登录之前尝试(但失败)启动应用程序。
  • 它运行为root.您可能需要User=在服务部分进行设置
  • 添加Environment=DISPLAY=:0Environment=XAUTHORITY=/home/username/.Xauthority

作为用户服务,它可能会更好地工作:

  • 搬去*.service~/.config/systemd/user/
  • 改成WantedBy=WantedBy=default.target

一旦它成为用户服务,请使用 启用它systemctl --user enable ibg.service或使用 启动它systemctl --user start ibg.service

相关内容