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 …
이 두 옵션의 차이점은 맨페이지에 설명되어 있습니다.화면(1):
-DM "분리" 모드에서 화면을 시작합니다. 그러면 새 세션이 생성되지만 연결되지는 않습니다. 이는 시스템 시작 스크립트에 유용합니다.
-디엠 또한 "분리" 모드에서 화면이 시작되지만 새 프로세스가 포크되지는 않습니다. 세션이 종료되면 명령이 종료됩니다.
스크린 세션은 루트로 실행되므로 systemd 장치에 포함하지 않은 경우 세션을 보려면 를 User=kermit
사용해야 합니다 .sudo screen -ls