解决systemd下tmux和screen无法后台执行命令
简介
目前大多数Linux发行版已经使用systemd
启动代替以前的init
启动,在systemd
下,默认会话结束时,会杀死的会话中的所有进程。
因此当远程ssh时exit
后screen
和tmux
的会话窗口也被关闭了。
原因
在systemd启动下,由loginctl
控制着用户登录的一些配置选项。例如用户 log out 时默认杀死用户所有进程。
解决方法:
方法一:修改
loginctl
默认配置#/etc/systemd/logind.conf KillUserProcesses=no
然后重启服务即可
sudo systemctl restart systemd-logind
方法二:运行命令在当前用户session外,使用
systemd-run
命令:systemd-run --user --scope tmux
systemd-run
用于后台执行命令,将进程从当前用户归属于systemd
用户方法三:将命令写成一个服务,通过服务启动
例如将scrapyd命令作为服务单元启动
#/usr/lib/systemd/system/scrapyd.service [Unit] Description=run the Scrapyd server [Service] ExecStart=/home/pi/.virtualenvs/python3/bin/scrapyd Type=simple KillMode=process [Install] WantedBy=multi-user.target
而后执行命令即可:
sudo systemctl daemon-reload sudo systemctl start scrapyd
相关资料