代码改变世界

Linux反空闲的设置和关闭

2020-04-03 22:53  AlfredZhao  阅读(798)  评论(0编辑  收藏  举报

有一定工作经验的运维人基本都会遇到这样的场景,某个窗口自动断开了,提示超时:

[oracle@jystdrac1 ~]$ timed out waiting for input: auto-logout

如果你使用的是SecureCRT,很多人可能会想到工具有反空闲的设置,也是网上能轻易搜到的常用解决方案,可以在超时时间内定时发送一些信息,使得会话保持活跃状态。

--比如定时发送“~”,但有时也会不好用:
[oracle@jystdrac1 ~]$ ~timed out waiting for input: auto-logout

--比如定时发送回车"\n",测试还比较好用:

但要注意这实际有非常大的隐患,可能引起误操作:
不妨试想一下你远程桌面到某环境想删除某个目录下以.log结尾的日志文件,
当你想要输入`rm -rf *.log`,但当只输入到`rm -rf *`时,网络故障远程桌面断了,远程桌面上的CRT终端还在
那么接下来的自动定时"\n" 回车,就是一场灾难了,会把目录下所有文件都删除掉。。

那追溯下为什么会有这样的自动超时限制,有这样的变量(这里为了方便演示,设置了10s间隔的超时):

[oracle@jystdrac1 ~]$ echo $TMOUT
10

如果我们尝试临时设置TMOUT变量为0,就可以起到当前会话不会超时断开的作用(下面测试验证设置后,超过10s也未断开):

[oracle@jystdrac1 ~]$ export TMOUT=0
[oracle@jystdrac1 ~]$ echo $TMOUT
0
[oracle@jystdrac1 ~]$ 
[oracle@jystdrac1 ~]$ date
Fri Apr  3 21:04:16 CST 2020
[oracle@jystdrac1 ~]$ date
Fri Apr  3 21:04:28 CST 2020
[oracle@jystdrac1 ~]$ 

但有一点需要注意,这个参数通常是root用户下,/etc/profile文件设置的,如果同时设置了readonly TMOUT

export TMOUT=10
readonly TMOUT

那么,就不会允许你临时设置或取消TMOUT的值,如果你尝试这样做,会收到明确的提示:

[oracle@jystdrac1 ~]$ export TMOUT=0
-bash: TMOUT: readonly variable
[oracle@jystdrac1 ~]$ 
[oracle@jystdrac1 ~]$ unset TMOUT
-bash: unset: TMOUT: cannot unset: readonly variable
[oracle@jystdrac1 ~]$ 
[oracle@jystdrac1 ~]$ echo $TMOUT
10

这种情况就得考虑在超时时间内,反空闲发送"\n"回车了。但也同样面临上面说到的那种风险。
或者以后当你知道自己操作必然是执行很久怕会话断掉,可以考虑nohup 命令 &后台执行的方式。