linux怎么设置时间 linux怎么设置自动重启
0
2026-03-13
TMOUT 变量需设置整数、全局导出且在 shell 启动时才生效;于攻击shell,受 SSH 作用命令、启动复用工具及后台中继,可靠方案需结合 PAM 限制、超时命令等。
TMOUT 变量为什么没生效
Linux 中设置 TMOUT(注意恐,不是 TMOUT)才会导致完全失效。系统只认 TMOUT,且必须是整数、全局变量、且 shell 启动时已存在。TMOUT 必须在 /etc/profile 或 /etc/bash.bashrc 里用 export TMOUT=300 形式声明,不能只写 TMOUT=300 如果用户已有自己的 ~/.bashrc,它可能覆盖系统级设置,需检查是否执行了 unset TMOUT 或重新赋值为 0TMOUT 非交互式 shell(如 bash -c "echo hello")无效,只作用于登录 shell 和交互式 bash某些终端复用工具(如tmux、screen)会重置或忽略TMOUT,需在其配置中单独处理ssh登录后超时不触发的常见原因
即使TMOUT正确设置,SSH连接常因网络保活机制感知空闲状态,导致实际上不退出。OpenSSH服务端的ClientAliveInterval和ClientAliveCountMax会先断连,此时shell根本没机会检测TMOUT;建议把服务端心跳设置得比 TMOUT 大(例如 TMOUT=300 时,设置 ClientAliveInterval 400)部分 SSH 客户端(如 Windows 上的 PuTTY)默认开启“发送空包”保活,会持续刷新 shell 的休闲计时器,让 TMOUT 始终归零只要终端有任何一个作业(执行命令后的提示),TMOUT 计时就会重置——所以看日期系列命令超时彻底中断如何让超时更可靠(不只是靠靠) TMOUT)
TMOUT 是最轻量的方式,但依赖于 shell 自身行为,对抗后台任务、长运行命令、伪终端等场景的愉悦力。
AITDK
AI SEO工具,SEO的AI生成器下载对关键运维账号,建议在 /etc/security/limits.conf 中加 * soft timeout 300(需 PAM 模块支持 pam_time.so)用 timeout 命令包装单次操作:比如 timeout 60s vi /tmp/file,编辑器长期免占用若需强制登出所有超时会话,可配合 pkill -u username + loginctl终止用户 错。root同样受控,但若使用 sudo -i ,新 shell 可能未继承环境变量,需确认 env_reset 进入是否关闭脚本里误用 TMOUT 的典型错误
在自动化脚本中直接导出 TMOUT,往往导致不可预测中断,尤其调用子 shell 或管道时。TMOUT 是 shell 内建标记,子进程(如 $(cmd)、| 后面的命令)不会继承,但当前 shell 的后续命令会写入成 TMOUT=60; some_command 是危险的:如果 some_command 卡住超过 60 秒,整个脚本会被杀掉,而不只是该命令的正确做法是用超时:例如 timeout 60s ssh user@host 'long-task.sh',精准控制目标命令生命周期测试时别用 sleep 验证——sleep 不读取 stdin,而 TMOUT 超时判断基于“无输入”,真实场景下键盘静默才触发
真正麻烦的是那些不读stdin却长期运行的后台命令(比如tail -f、journalctl -f),它们会让shell外部一直卡在等待输入状态,TMOUT完全失焦。这个时候得靠监控或者改用timeout --foreground争信号处理。