web-dev-qa-db-ja.com

systemctlステータスは非アクティブなデッドを示します

私は、単純なことを行う独自の(単純な)systemdサービスを作成しようとしています(シェルスクリプトを使用して、1から10までの数字をファイルに書き込むなど)。私のサービスファイルは次のようになります。

[Unit]
Description=NandaGopal
Documentation=https://google.com
After=multi-user.target

[Service]
Type=forking  
RemainAfterExit=yes
ExecStart=/usr/bin/hello.sh &

[Install]
RequiredBy = multi-user.target

これは私のシェルスクリプトです。

#!/usr/bin/env bash

source /etc/profile
a=0
while [ $a -lt 10 ]
do
   echo $a >> /var/log//t.txt
        a=`expr $a + 1`
done

何らかの理由で、サービスは起動せず、systemctlは以下の出力を表示しています。

root@TARGET:~ >systemctl status -l hello
* hello.service - NandaGopal
   Loaded: loaded (/usr/lib/systemd/system/hello.service; disabled; vendor     preset: enabled)
   Active: inactive (dead)
    Docs: https://google.com

過去2日間で何がうまくいかなかったかを把握しようとしています。誰でもここで私を助けてもらえますか?

よろしく、ナンダネーター

14
nandanator
  • Type=Forkingを設定しましたが、サービスは機能しません。 Type=oneshotを試してください
  • ExecStart行に「&」がありますが、これは必要ありません。
  • サービスはdisabledです。つまり、ブート時に開始するのはenabledではありませんでした。 systemctl enable helloを実行して、起動時に開始するように設定する必要があります。

man systemd.directivesを確認して、unitファイルで使用できるすべてのディレクティブのインデックスを見つけることができます。

20
Mark Stosberg

いくつかのポイント:

  1. Type=forkingを使用する場合は、PidFileを指定することをお勧めします。

  2. あなたの場合、Type=simple、および&なしのExecStartが機能します。

  3. systemctl start service-nameを使用してサービスを開始します

  4. 次に、systemctl status service-nameを使用してそのステータスを確認します。サービスが開始されていない場合、ステータスは非アクティブ/デッドになります。

5