写了一个通过ip命令获取当前系统ip地址信息的脚本,手工测试没有任何问题,但是部署到crontab中,就会出现获取IP地址失败情况。
辛苦查了一天,最后发现直接在shell下执行脚本时的环境变量和在crontab环境下的环境变量不同
测试如下:
# whereis ip
ip: /usr/sbin/ip /usr/share/man/man7/ip.7.gz /usr/share/man/man8/ip.8.gz
# echo $PATH
/root/perl5/bin:/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# crontab -l
no crontab for root
# crontab -e编辑后
# crontab -l
*/1 * * * * echo $PATH >> /tmp/path.txt
# tail -f /tmp/path.txt
/usr/bin:/bin
所以 在crontab执行 ip addr命令,查找不到系统的IP地址,所以要在脚本里面带上ip命令的路径,或者使用sudo。
参考链接:
Crontab内环境变量与Shell环境变量的关系及解决问题的办法