首页 > 代码库 > ps引发的血案
ps引发的血案
开发的shell脚本有一段用于判断进程是否启动,代码如下
start cadvisor fail
逻辑没什么问题,但通过NAS执行后总是返回
start cadvisor fail
登录机器后,用ps aux可以查到进程实际是启动的,而在机器上执行脚本也是成功的
增加打印,然后调用NAS接口执行,发现进程名出现了被截断的情况,如docker进程后面的参数全没了,而本来是cadvisor进程的,显示为root 3242 2.0 0.3 78148 6308 ? Sl 20:50 0:00 /usr/local/bin/
root 2924 0.1 0.0 9420 1576 ? S 20:50 0:00 bash v2.0/node-root 3166 2.8 0.5 259720 11948 ? Sl 20:50 0:00 /usr/bin/dockerroot 3173 0.0 0.0 0 0 ? S< 20:50 0:00 [loop0]root 3174 0.0 0.0 0 0 ? S< 20:50 0:00 [loop1]root 3175 0.0 0.0 0 0 ? S< 20:50 0:00 [kdmflush]root 3177 0.0 0.0 21248 868 ? S 20:50 0:00 udevd --daemonroot 3178 0.0 0.0 21248 992 ? S 20:50 0:00 udevd --daemonroot 3180 0.0 0.0 0 0 ? S< 20:50 0:00 [bioset]root 3181 0.0 0.0 0 0 ? S< 20:50 0:00 [kcopyd]root 3182 0.0 0.0 0 0 ? S< 20:50 0:00 [bioset]root 3183 0.0 0.0 0 0 ? S< 20:50 0:00 [dm-thin]root 3184 0.0 0.0 0 0 ? S< 20:50 0:00 [bioset]root 3242 2.0 0.3 78148 6308 ? Sl 20:50 0:00 /usr/local/bin/root 3250 0.0 0.0 15312 1128 ? R 20:50 0:00 ps aux
输出这东西跟终端十有八九脱不了干系, 可能设置显示的长度在使用NAS的时候和直接在终端里的不相同
打印了下
直接在机器上执行setty -a
并echo $COLUMNS
,结果如下
#setty -aspeed 38400 baud; rows 52; columns 200; line = 0;#echo $COLUMNS200
使用NAS调用脚本时,增加打印COLUMNS的值,结果COLUMNS=80
直接在机器上将COLUMNS设置为80, 结果复现了被截断的问题
#export COLUMNS=80#ps auxroot 3520 0.6 0.9 120996 20164 ? Sl 13:17 1:01 /usr/local/bin/root 3595 0.2 0.9 32480 20040 ? Sl 13:17 0:22 /usr/local/bin/root 7165 0.0 0.0 35728 1140 ? S 15:49 0:00 /USR/SBIN/CRONroot 7166 0.0 0.0 35728 1144 ? S 15:49 0:00 /USR/SBIN/CRON
看来是因为字符长度限制的问题,鬼知道NAS的环境变量从谁那里继承过来的~~
如果需要解决ps显示进程的长度被截断的问题,方法也比较多,可以修改下ps的命令能够输出足够长,man ps了一下,发现了这个w参数
-w Wide output. Use this option twice for unlimited width.--width n Set screen width.
追加使用ww
参数后,脚本执行正常。
写shell脚本的人经常会遇到环境变量这样的大坑,所以尽量选择稳妥的实现方式或者通过自己设置环境变量来规避这样的问题
ps引发的血案
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。