GNU/Linux >> Linux の 問題 >  >> Debian

Debian – Systemd:サービスはExecstart=とExecstop=の両方の設定を欠いています。拒否しますか?

systemdを介してDebianディストリビューションでデーモン/サービスとしてアプリを実行しようとしています 。これが私のサービスファイルです:

[Unit]
Description=MyApp Service
After=multi-user.target

[Service]
Type=simple
Restart=always
ExecStart=sudo /usr/bin/java -jar /home/pi/myapp.jar

[Install]
WantedBy=multi-user.target

それを/lib/systemd/system/myapp.serviceにコピーします 。次に実行します:

sudo systemctl enable myapp

次に、ステータスを確認します:

sudo systemctl status myapp

そして、私はこれらのエラーを見ます:

● myapp.service - MyApp Service
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead)

Sep 29 09:56:24 raspberrypi systemd[1]: [/lib/systemd/system/myapp.service:8] Executable path is not absolute, ignoring: sudo /usr/bin/java -jar /home/pi/myapp.jar
Sep 29 09:56:24 raspberrypi systemd[1]: myapp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.

which javaを実行すると なるほど:

[email protected]:/lib/systemd/system $ which java
/usr/bin/java

だから私はなぜsystemd 実行可能パスについて不平を言っています。 トラブルシューティングの方法について何かアイデアはありますか?

承認された回答:

sudo パスは絶対ではありません。 systemdユニットがシステムユニットの場合、システムユニットはデフォルトでrootとして実行されるため、sudoは必要ありません。

編集:JVMとJavaアプリケーション全体をrootとして実行する代わりに、サービスを非特権ユーザーとして実行する方がおそらく良いでしょう。アプリケーションに、通常は特権のないユーザーには付与されない機能が必要な場合は、AmbientCapabilitiesを使用して追加できます。 設定。たとえば、次の行を[Service]に追加します。 セクション:

AmbientCapabilities=CAP_SYS_RAWIO
User=nobody

サービスはユーザーnobodyとして実行されます ただし、CAP_SYS_RAWIOが付与されます 機能。


Debian
  1. Debianで.binファイルと.runファイルを実行する方法

  2. Debian 10にWildFly(JBoss)をインストールして設定する方法

  3. Ubuntu / DebianにMonit(プロセスとサービスの監視)をインストールする方法

  1. Debian 9でのNFSサーバーとクライアントのセットアップ(ストレッチ)

  2. Debianパッケージングを介してSystemdファイルを条件付きで有効にしますか?

  3. Systemd:After と Requires の両方を使用する

  1. Debian – Debianのサービスはどのように機能し、どのように管理できますか?

  2. Debian – SystemdでOnfailureを使用する適切な方法は?

  3. Debian –サービス開始リクエストの繰り返しが速すぎて、開始を拒否しましたか?