25
2020
01

crontab中的ss

使用crontab对服务器上的运行情况进行信息收集和监控,检测端口是否正常监听用到ss命令:

ret=`ss -nlp | grep xxxx`
if [ "$ret" = "" ]; then
    xxx
fi

crontab的标准输出日志中,发现无论是否正常监听端口,ret的值总是空。手动执行脚本,ret的信息就正常。奇了怪哉。

在脚本中加上调试信息: set -x,同时将错误信息也输出到log中:* * * * * ~/foo.sh > ~/foo.log 2>&1。等新log生成,发现问题:“ss: command not found”。OK,cron执行任务时找不到ss命令。

继续跟踪为何ss命令不能在crontab中使用:which ss查看ss的路径,定位ss在/usr/sbin目录内;接着在crontab中打印PATH信息,输出为:“/usr/bin:/bin”。于是真相大白:ss确实不在crontab执行时的路径下。

问题的修复也很简单:export PATH=/usr/sbin:$PATH,将这个命令放置在ss的命令之前。

顺带一提,在/etc/crontab文件,/usr/sbin目录已经被包含在执行时的路径内:PATH=/sbin:/bin:/usr/sbin:/usr/bin。

原文链接:https://www.qiquanji.com/post/4868.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。