解决systemd下tmux和screen没法会话保持后台执行命令

简介

  目前大多数Linux发行版已经使用systemd启动代替之前的init启动,在systemd下,默认会话结束时,会杀死的会话中的全部进程。html

  所以当远程ssh时exitscreentmux的会话窗口也被关闭了。python

缘由

  在systemd启动下,由loginctl控制着用户登陆的一些配置选项。例如用户 log out 时默认杀死用户全部进程。ubuntu

解决方法:

  • 方法一:修改loginctl默认配置segmentfault

    #/etc/systemd/logind.conf
    KillUserProcesses=no
    复制代码

    而后重启服务便可bash

    sudo systemctl restart systemd-logind
    复制代码
  • 方法二:运行命令在当前用户session外,使用systemd-run命令:session

    systemd-run --user --scope tmux
    复制代码

    systemd-run用于后台执行命令,将进程从当前用户归属于systemd用户ssh

  • 方法三:将命令写成一个服务,经过服务启动scrapy

    例如将scrapyd命令做为服务单元启动spa

    #/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
    复制代码

    然后执行命令便可:rest

    sudo systemctl daemon-reload
    
    sudo systemctl start scrapyd
    复制代码

相关资料

我的博客 -> 原文地址

相关文章
相关标签/搜索