pythonスクリプトはsystemd画面から起動できません。エラーなし

pythonスクリプトはsystemd画面から起動できません。エラーなし

Pythonスクリプトを作成しましたが、画面内で実行したいと思います。

screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py

コマンドラインでは正常に実行されますが、systemdでサービスとして起動しようとすると、画面セッションは開始されません。

.サービス構成:

[Unit]
Description=Test Service
After=multi-user.target
[email protected]

[Service]
Type=simple
ExecStart=/usr/bin/screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

システム:

kermit@minnow:~ $ sudo service active-climateMngr.py status
● active-climateMngr.py.service - Test Service
   Loaded: loaded (/lib/systemd/system/active-climateMngr.py.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sat 2021-02-20 08:58:46 CST; 4min 7s ago
  Process: 14373 ExecStart=/usr/bin/screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py (code=exited, status=0/SUCCESS)
 Main PID: 14373 (code=exited, status=0/SUCCESS)

Feb 20 08:58:46 minnow.coinz.com systemd[1]: Started Test Service.
Feb 20 08:58:46 minnow.coinz.com systemd[1]: active-climateMngr.py.service: Succeeded.

画面:

kermit@minnow:~ $ screen -ls
No Sockets found in /run/screen/S-kermit.

スクリーンセッションでカスタムPythonスクリプトを実行するにはどうすればよいですか?

以前は、システム画面なしでスクリプトを動作させることができましたが、もう機能しませんでした。

使っています

sudo systemctl daemon-reload

すべての変更。

ベストアンサー1

Type=simplesystemdデバイスはバックグラウンドに分岐せず、代わりにバックグラウンドscreen -d -mで新しい分離セッションを作成して終了することが予想されます。これにより、systemdはユニットが死んだと見なし、分離されたセッションを終了したり追跡を失ったりします。代わりに使用してください-D -m

Type=simple
ExecStart=/usr/bin/screen -D -m …

これら2つのオプションの違いは、マンページで説明されています。画面(1):

-DM 「分離」モードで画面を起動します。これにより、新しいセッションが作成されますが、接続されません。これはシステム起動スクリプトに役立ちます。
- Diem また、「分離」モードでは画面が起動しますが、新しいプロセスはフォークされません。セッションが終了すると、コマンドは終了します。

スクリーンセッションはrootとして実行されるため、systemdデバイスに含まれていない場合はセッションを表示するためにをUser=kermit使用する必要があります。sudo screen -ls

おすすめ記事