ssh升级后nohup进程在终端退出后消失

现象

ssh升级后nohup进程在终端退出后消失, ssh版本如下:

# ssh -V
OpenSSH_8.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

怀疑是OpenSSH的bug。

临时解决办法

方式1

终端ssh登录后,再通过:su - 用户 后执行nohup指令,这样再退出终端后,进程仍可保留。

方式2(经验证,还是不行,过几分还是会被SIGKILL干掉)

如果上述方式还不行,可以用strace跟踪一下看看是什么信号导致进程终止的。

# strace -T -tt -e trace=all -p 28842
strace: Process 28842 attached
15:46:35.200201 read(4, 

0x7bf1c0, 20)   = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <82.387507>
15:47:57.587934 --- SIGHUP {si_signo=SIGHUP, si_code=SI_KERNEL} ---
15:47:57.588034 read(4, 0x7bf1c0, 20)   = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.001049>
15:47:57.589260 --- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=1, si_uid=0} ---
15:47:57.589429 +++ killed by SIGTERM +++

这里的情况是被SIGTERM终止,正常情况下,SIGTERM信号是不会传递给nohup子进程的。
临时解决办法:
将要nohup执行的命令加到sh脚本中,然后再sh的前面部分加入SIGTERM信号的拦截:

# cat 1.sh
trap '' SIGTERM   ##这里拦截,让它不处理
tail -f gun

# nohup ./1.sh &

原因及最终解决办法

OpenSSH_8.4后加了sshd.socket方式启动sshd服务,而以这种方式启动,使用的服务配置文件为:sshd@.service

[root@2]cd /usr/lib/systemd/system/
[root@2 system]# vi sshd@.service 
[Unit]
Description=OpenSSH per-connection server daemon
Documentation=man:sshd(8) man:sshd_config(5)
Wants=sshd-keygen.service
After=sshd-keygen.service

[Service]
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=-/usr/sbin/sshd -i $OPTIONS
KillMode=process     ### 相比sshd.service少了这个设置
StandardInput=socket

加上上述配置,重启sshd.socket方式服务即可。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值