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=simple
systemdデバイスはバックグラウンドに分岐せず、代わりにバックグラウンド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