web-dev-qa-db-ja.com

systemd:このサービスが非アクティブ(非アクティブ)なのはなぜですか?

私はこの単純なpythonスクリプトをデーモン化しようとしています:

#!/usr/bin/python3
print('hello')

これが私のコマンドとステータスです:

root@gw-0317STLG0067 /lib/systemd/system # systemctl enable test.service
root@gw-0317STLG0067 /lib/systemd/system # systemctl daemon-reload
root@gw-0317STLG0067 /lib/systemd/system # systemctl start test.service
root@gw-0317STLG0067 /lib/systemd/system # systemctl status test.service
* test.service - My Script Service
   Loaded: loaded (/usr/lib/systemd/system/test.service; enabled; vendor preset:
   Active: inactive (dead) since Sun 2016-07-31 10:06:29 UTC; 4s ago
  Process: 20620 ExecStart=/root/test.py (code=exited, status=0/SUCCESS)
 Main PID: 20620 (code=exited, status=0/SUCCESS)

Jul 31 10:06:29 gw-0317STLG0067 systemd[1]: Started My Script Service.
Jul 31 10:06:29 gw-0317STLG0067 test.py[20620]: hello

そしてここに私のサービススクリプト:

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

[Service]
Type=simple
ExecStart = /root/test.py

[Install]
WantedBy=multi-user.target

なぜそれが死んでいるのか、そしてprintステートメントをデーモン化したときにどうなるのか?端末を爆破する必要がありますか?

2
Goldname

スクリプトがそのエンドポイントに到達して終了するので、それは死んでいます。単一のprintステートメントがターミナルを爆破するのはなぜですか?デーモンは通常、ループで実行され、終了時間かどうかをチェックし、終了する場合(またはカーネルからの信号をキャッチする場合)に終了します。

2
DopeGhoti

スクリプトは通常、サービスとして開始され、非常に速く終了します(コマンドが1つだけあり、whileループなどで再実行されないため)。そのため、サービスがより早く終了し、ステータスを確認できます。いくつかのループを追加して(ログがスパムにならないようにタイムアウトして)、それがアクティブであることを確認できるようにします。

while True:
    print('hello')
    time.sleep(2)

十分に(journalctl -u test.serviceを使用して)確認したらすぐに、systemctlを使用して強制終了します。

4
Jaleks

あなたのpythonスクリプトは 'hello world'を出力し、次にpythonはスクリプトの終わりに達したことを認識し、実行を終了します。

Systemdで何をしたいですか?

次のような簡単なshスクリプトを試してください。

#!/bin/sh touch /tmp/myfile$$.txt echo /tmp/myfile$$.txt tail -f /tmp/myfile$$.txt

サービスステータスで<file>の名前を取得します。

次に、ターミナルでテキストをパイプでパイプします:echo "Hello World" >> <file>とサービスを調べます。

ループして繰り返し印刷するサービスは、端末をいっぱいにします....ここでは、ファイルを読み取り、必要なときにテキストを自由に入力できます。サービスを開始するたびに新しいファイルが作成されます。$$はPIDです。次に、演習として、サービスを停止するときに/tmp/myfile$$.txtファイルを削除します;-)

演習のキーワード:trapは一方向です;-)

物事をシンプルに保ち、学び、それに追加してください。 pythonもシグナルに反応する可能性があります。shを選択したのは、簡単に始められます...

0
thecarpy