我有一个 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
由于它是一个图形应用程序,我怀疑这个答案可能对您有帮助:
当您的服务文件运行图形应用程序时,您会遇到一些问题。
如果你想将其保留为系统服务:
- 它是
WantedBy=multi-user.target
。我建议更改为WantedBy=graphical.target
和 ,After=graphical.target
这只能在显示管理器启动后发生。但是,这可能仍然是一个问题,因为它可能会在您登录之前尝试(但失败)启动应用程序。 - 它运行为
root
.您可能需要User=
在服务部分进行设置 - 添加
Environment=DISPLAY=:0
和Environment=XAUTHORITY=/home/username/.Xauthority
。
作为用户服务,它可能会更好地工作:
- 搬去
*.service
~/.config/systemd/user/
- 改成
WantedBy=
WantedBy=default.target
一旦它成为用户服务,请使用 启用它systemctl --user enable ibg.service
或使用 启动它systemctl --user start ibg.service
。