前段时间写了一个shell脚本,用来监控线上服务器连接数是否超过阈值,超过阈值后,会自动发短信报警。脚本逻辑主要为:
1、 获取系统的连接数。
2、 获取本机的ip。
3、 判断连接数是否超过阈值。
如果超过阈值,调用短信接口给负责人发短信。调试完脚本,短信报警,服务器ip地址一切OK。
于是部署到crontab,坐等报警短信。为了测试一下,把连接数阈值改为很小的值,触发短信报警。叮~短信确实收到了。一看,咦?咋短信内容没有ip地址呢?
正常是这样的呀
于是把crontab运行的结果重定向到log文件,看了下,发现ip输出那一行确实为空。
到网上查了下,原来crontab运行的问题很普遍,坑人无数呀~
究其原因,简单来说,就是crontab运行和直接运行shell脚本加载的环境变量不一致。如果想知道详细原因,请移步:https://blog.csdn.net/xianzixiang/article/details/52439960。
解决方案很简单,就是在脚本最前面添加以下两行语句:
source/etc/profile
source/root/.bash_profile