次のコマンドを使用すると、問題なく端末で実行できる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'.
誰でも問題を特定する方法を助けることができますか?ステータスコマンドは、サービスを実行できない理由を提供しません。失敗に関する追加情報を取得する方法はありますか?コマンドラインバージョンの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
。