Systemd
在 systemd 中,python 腳本無法在螢幕中啟動。沒有錯誤
我寫了一個我想在螢幕內啟動的python腳本
screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py
這在命令行中工作得很好,但是當我嘗試在 systemd 作為服務中啟動它時,不會啟動任何螢幕會話。
.服務配置:
[Unit] Description=Test Service After=multi-user.target Conflicts=getty@tty1.service [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.
如何讓 systemd 在螢幕會話中啟動自定義 pythons 腳本?
之前我能夠在 systemd 中使腳本在沒有螢幕的情況下工作,但現在也不再有效。
我在用
sudo systemctl daemon-reload
隨著每一次變化。
一個 systemd 單元
Type=simple
預計不會分叉到後台,而是在後台screen -d -m
創建一個新的分離會話並退出。這會導致 systemd 將單元視為已死,並且要麼終止分離的會話,要麼失去對它的跟踪。改用-D -m
:Type=simple ExecStart=/usr/bin/screen -D -m …
手冊頁螢幕(1)中解釋了這兩個選項之間的區別:
-d -m 以“分離”模式啟動螢幕。這會創建一個新會話,但不會附加到它。這對於系統啟動腳本很有用。
-D -m 這也會以“分離”模式啟動螢幕,但不會派生新程序。如果會話終止,則命令退出。
如果您的 systemd 單元中沒有包含例如螢幕會話,則螢幕會話以 root 身份執行
User=kermit
,您需要使用sudo screen -ls
來查看會話。