bra*_*rad 4 python systemd services python3
我写了一个 python 脚本,我想在屏幕内启动
screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py
Run Code Online (Sandbox Code Playgroud)
它在命令行上工作得很好,但是当我尝试在 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
Run Code Online (Sandbox Code Playgroud)
系统:
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.
Run Code Online (Sandbox Code Playgroud)
屏幕:
kermit@minnow:~ $ screen -ls
No Sockets found in /run/screen/S-kermit.
Run Code Online (Sandbox Code Playgroud)
如何让 systemd 在屏幕会话中启动自定义 pythons 脚本?
我以前能够在 systemd 中让脚本在没有屏幕的情况下工作,但现在也不再有效。
我在用
sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
随着每一个变化。
Type=simple
预计systemd 单元不会进入后台,而是在后台screen -d -m
创建一个新的分离会话并退出。这会导致 systemd 认为该单元已死亡,并且要么终止分离的会话,要么失去对它的跟踪。使用-D -m
来代替:
Type=simple
ExecStart=/usr/bin/screen -D -m …
Run Code Online (Sandbox Code Playgroud)
手册页screen(1) 中解释了这两个选项之间的区别:
-d -m 以“分离”模式启动屏幕。这会创建一个新会话,但不会附加到它。这对于系统启动脚本很有用。
-D -m 这也以“分离”模式启动屏幕,但不会分叉新进程。如果会话终止,则命令退出。
由于 screen 会话以 root 身份运行,如果您不包括User=kermit
在 systemd 单元中,则需要使用sudo screen -ls
来查看会话。
归档时间: |
|
查看次数: |
241 次 |
最近记录: |