linux使用top重定向生成文本时command列被截取的问题

数据库服务器上部署有oswbb监控,在一次故障发生时,发现其top监控中command列只有简略的命令,比如ckpt或者LOCAL=NO的oracle进程的command都显示为oracle,不能分辨出到底是oracle的什么进程出了问题。为了让其显示完整的command,更改了其xtop.sh脚本文件,增加了-c选项。手工运行xtop脚本,观察生成的文件,满足了要求。但是在oswbb自己调用中出现了问题,command列被截取了,一行的长度最大80个字符。

排查了oswbb中的脚本,没有发现有截取命令
怀疑是环境变量的问题,因为手工运行没问题,脚本自动调用有问题,脚本使用nohup来调用xtop,nohup调用经常会出现环境变量问题,网上查了下shell的默认环境变量,找到了COLUMNS这个变量,通过set查看当前的环境变量,可以看到COLUMNS=189,在xtop.sh脚本中设置export COLUMNS=189解决。


$* 将所有命令行参数当做单个文本值包含
$@ 将所有命令行参数当做独立的文本值包含
$# 命令行参数数目
$? 最近使用的前端进程的退出状态码
$- 当前命令选项标记
$$ 当前shell的进程ID(PID)
$! 最近执行的后台进程PID
$0 来自命令行的命令名称
$_ shell的绝对路径名
BASH 用来调用shell的全文件名
BASH_ARGC 当前子函数中的参数数目
BASH_ARGV 含有所有指定命令行参数的数组
BASH_COMMAND 当前正在被执行的命令的名称
BASH_ENV 如果设置了的话,每个bash脚本都会尝试在运行前执行由这个变量第一的起始文件
BASH_EXECUTION_STRING 在-c命令行选项中用到的命令
BASH_LINENO 含有脚本中每个命令的行号的数组
BASH_REMATCH 含有与指定正则表达式匹配的文本元素的数组
BASH_SOURCE 含有shell中已声明函数所在源文件的名称的数组
BASH_SUBSHELL 当前shell产生的子shell数目
BASH_VERSION 当前bash shell实例的版本号
BASH_VERSINFO 含有当前bash shell实例的主版本号好次版本号的可变数组
COLUMNS 含有当前bash shell实例使用的终端的终端宽度
COMP_CWORD 含有当前光标位置的变量COMP_WORDS的索引值
COMP_LINE 当前命令行
COMP_POINT 当前光标位置相对于当前命令起始位置的索引
COMP_WORDS 含有当前命令行上所有的单词的可变数组
COMPREPLY 含有由shell函数生成的可能填充字的可变数组
DIRSTACK 含有目录栈当前内容的可变数组
EUID 当前用户的数字有效用户ID
FCEDIT fc命令使用的默认编辑器
FIGNORE 冒号分隔的文件名补全时要忽略的后缀名列表
FUNCNAME 当前执行的shell函数的名称
GLOBIGNORE 以冒号分隔的模式列表,定义了文件名展开时要忽略的文件名集合
GROUPS 含有当前用户属组列表的可变数组
histchars 控制历史记录展开的字符,最多有3个字符
HISTCMD 当前命令在历史记录中的位置
HISTCONTROL 控制哪些命令留在历史记录列表中
HISTFILE 保存shell历史记录列表的文件名(默认是 .basj_history)
HISTFILESIZE 在历史记录中保存行数的上限
HISTIGNORE 冒号分隔的用来决定哪些命令不存进历史文件的模式列表
HISTSIZE 最多在历史文件中保存多少条记录
HOSTFILE 含有shell在补全主机名时读取的文件的名称
HOSTNAME 当前主机的名称
HOSTTYPE 当前运行bash shell的机器
IGNOREEOF shell在退出前必须收到连续EOF字符的数量,如果不存在这个值,默认是1
INPUTRC readline初始文件名(默认是 .inputrc)
LANG shell的语言环境分类
LC_ALL 定义个语言环境变量,覆盖LANG变量
LC_COLLATE 设置对字符串值排序时用的对照表顺序
LC_TYPE 决定在文件名展开和模式匹配时用字符如何解释
LC_MESSAGES 决定解释前置美元符($)的双引号字符串的语言环境变量
LINENO 脚本中当前执行的行号
LINES 定义了终端上可见的行数
MACHTYPE 用“cpu-公司-系统”格式定义的系统类型
MAILCHECK shell多久查看一次新邮件(以秒为单位,默认是60)
OLDPWD shell之前的工作目录
OPTERR 设置为1时,bash shell会显示getopts命令产生的错误
OSTYPE 定义了shell运行的操作系统
PIPESTATUS 含有前端进程的退出状态码列表的可变数组
POSIXLY_CORRECT 设置了的话,bash会已POSIX模式启动
PPID bash shell父进程的PID
PROMPT_COMMAND 设置了的话,在命令行主提示符显示之前会执行这条命令
PS1 主命令行提示符字符串
PS2 次命令行提示符字符串
PS3 select命令的提示符
PS4 如果使用bashde -x参数,在命令行显示之前显示的提示符
PWD 当前工作目录
RANDOM 返回一个0~32767的随机数;对其赋值可作为随机数生成器的种子
REPLY read命令的默认变量
SECONDS 自动shell启动到现在的描述;对其赋值将会充值计数器
SHELLOPTS 冒号分割的打开的bash shell选项列表
SHLVL 表明shell级别,每次有新bash shell(启动自增)
TIMEFORMAT 指定了shell显示时间值的格式
TMOUT select和read命令在没输入的情况下等待多久(以秒为单位)。默认为零,表示无限长
UID 当前用户的真实用户ID


文章名称:linux使用top重定向生成文本时command列被截取的问题
文章地址:http://ybzwz.com/article/gjdgic.html