Ubuntu
正確執行 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
。
由於它是一個圖形應用程序,我懷疑這個答案可能會對您有所幫助:
您的服務文件在執行圖形應用程序時存在一些問題。
如果要將其保留為系統服務:
- 是
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
。