通过crontab执行top脚本无法获取进程完整命令路径求助
解决crontab中top无法获取进程完整路径的问题
问题根源
crontab执行脚本时的环境变量和交互式shell完全不一样,top的-c参数要正常展开完整命令路径,依赖TERM这类环境变量。而crontab默认的TERM是dumb,会限制top的输出格式,导致无法显示完整路径。
修复方法
1. 给top指定合适的TERM环境变量
修改你的shell脚本,在调用top前设置TERM为xterm(或其他支持完整格式的终端类型):
#!/bin/bash TERM=xterm /usr/bin/top -o +%CPU -c -n 1 -b >> /dba/output.log
2. 强制top切换到完整路径模式(可选)
部分版本的top需要重复-c参数来确保展开完整路径,你可以试试:
#!/bin/bash TERM=xterm /usr/bin/top -o +%CPU -c -c -n 1 -b >> /dba/output.log
3. 排查crontab环境差异(进阶)
如果上面的方法没用,先确认crontab的环境变量和交互式shell的区别:
写个小脚本丢去crontab执行:
#!/bin/bash env > /dba/cron_env.log
然后对比交互式shell里env的输出,把缺失的关键环境变量补充到top命令前。
替代方案(top实在搞不定的话)
如果top在crontab里始终不给力,直接用ps命令实现相同需求,它不受环境变量影响,默认就能输出完整路径:
#!/bin/bash ps -eo pid,ppid,%cpu,cmd --sort=-%cpu >> /dba/output.log
这个命令会按CPU使用率降序输出进程的PID、父PID、CPU占比和完整命令路径。
内容的提问来源于stack exchange,提问作者Konika Pal
相关产品推荐
相关产品推荐

