私は、単純なことを行う独自の(単純な)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日間で何がうまくいかなかったかを把握しようとしています。誰でもここで私を助けてもらえますか?
よろしく、ナンダネーター
Type=Forking
を設定しましたが、サービスは機能しません。 Type=oneshot
を試してくださいExecStart
行に「&」がありますが、これは必要ありません。disabled
です。つまり、ブート時に開始するのはenabled
ではありませんでした。 systemctl enable hello
を実行して、起動時に開始するように設定する必要があります。man systemd.directives
を確認して、unit
ファイルで使用できるすべてのディレクティブのインデックスを見つけることができます。
いくつかのポイント:
Type=forking
を使用する場合は、PidFileを指定することをお勧めします。
あなたの場合、Type=simple
、および&
なしのExecStartが機能します。
systemctl start service-name
を使用してサービスを開始します
次に、systemctl status service-name
を使用してそのステータスを確認します。サービスが開始されていない場合、ステータスは非アクティブ/デッドになります。