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 …

이 두 옵션의 차이점은 맨페이지에 설명되어 있습니다.화면(1):

-DM "분리" 모드에서 화면을 시작합니다. 그러면 새 세션이 생성되지만 연결되지는 않습니다. 이는 시스템 시작 스크립트에 유용합니다.
-디엠 또한 "분리" 모드에서 화면이 시작되지만 새 프로세스가 포크되지는 않습니다. 세션이 종료되면 명령이 종료됩니다.

스크린 세션은 루트로 실행되므로 systemd 장치에 포함하지 않은 경우 세션을 보려면 를 User=kermit사용해야 합니다 .sudo screen -ls

관련 정보