在银河麒麟系统中可用timeout命令设置单条命令超时,如timeout 30s apt update;支持s/m/h单位,必须指定单位;可配合--preserve-status或tee保留状态和输出;还可封装为bash函数timeout_run实现批量调用。

在银河麒麟系统中通过命令行设置单条命令执行超时时间,避免长时间卡死或无限等待,需借助timeout命令实现,不依赖全局配置文件修改。
使用timeout命令限制单条命令运行时长
timeout是GNU coreutils组件,银河麒麟V10/V11默认已安装,无需额外安装。
执行timeout 30s apt update,表示强制apt update在30秒内结束,超时后自动终止进程并返回非零退出码。
timeout支持单位缩写:s(秒)、m(分钟)、h(小时),如timeout 2m curl -s http://intranet/api/health可限制curl最多运行2分钟。
【必须指定单位,写成timeout 30 apt update会报错:invalid time interval '30'】
为交互式命令设置超时并保留输出
某些命令(如ssh、ping、nc)可能产生实时输出,超时时需确保最后一屏可见。
方法一:加--preserve-status参数保留原始退出状态,便于脚本判断:
timeout --preserve-status 15s ssh user@192.168.1.100 'df -h'
方法二:结合tee记录完整过程,超时后仍能查看已输出内容:
timeout 10s ping -c 20 8.8.8.8 | tee /tmp/ping_log.txt
注意:若命令本身含重定向(如> file),需将timeout整个包裹在括号中,否则重定向不生效。
批量命令统一加超时的脚本封装
第一步:创建超时包装函数,写入~/.bashrc:
timeout_run() { if [ $# -lt 2 ]; then echo "用法: timeout_run "; return 1; fi; timeout "$1"s "${@:2}"; }
第二步:使配置生效:
source ~/.bashrc
第三步:调用示例:
timeout_run 5 systemctl is-active nginx → 返回active或超时后无输出
这一步操作起来很简单,直接把函数粘贴进.bashrc再source就行。函数不兼容带管道的复杂命令链,如需处理请改用子shell封装。











