Cronjob中pstree执行成功top命令报unknown terminal type错误怎么办
问题原因
cron 执行任务时会使用无终端关联的最小化运行环境,TERM 环境变量默认值为 unknown,而 top 命令默认运行在交互模式,依赖终端属性来控制输出格式,因此触发报错。同时 top 默认会持续刷新输出,不会主动终止,也是和管道后 head 搭配时输出异常的原因之一。
解决方法
- 给
top命令添加专用参数适配非交互场景:-b:启用批处理模式,无需终端即可正常输出结果-n 1:指定仅输出1次结果后自动退出,避免持续运行
- (可选)若修改参数后仍有终端类型报错,可以在 cron 任务开头声明
TERM环境变量,设置为常用的终端类型如xterm即可
修改后的 cron 任务示例
* 5-7 * * * ( TERM=xterm; sudo pstree -pa > "$HOME/log/`date "+\%F-\%T"`-pstree.txt"; sudo top -b -n 1 -o \%MEM | head -25 > "$HOME/log/`date "+\%F-\%T"`-topMEM.txt"; sudo top -b -n 1 -o \%CPU | head -25 > "$HOME/log/`date "+\%F-\%T"`-topCPU.txt" )
额外注意事项
- 提前执行
mkdir -p $HOME/log确保输出目录存在,避免写入文件时失败 - 若使用sudo执行命令,需要确认当前cron所属用户的sudo权限是否免密,否则cron无交互输入密码的能力会导致命令执行失败
内容的提问来源于stack exchange,提问作者Tudvari
相关产品推荐
相关产品推荐

