システムサービスファイルの正常な実行に問題があります。

システムサービスファイルの正常な実行に問題があります。

次のコマンドを使用すると、問題なく端末で実行できる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

グラフィックアプリケーションなので、この答えが役に立つと思います。

systemd サービスファイルの DISPLAY 設定

サービスファイルがグラフィカルアプリケーションを実行している場合、いくつかの問題が発生します。

システムサービスとして維持するには:

  • それはWantedBy=multi-user.targetWantedBy=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

おすすめ記事