红联Linux门户
Linux帮助

解决Crontab无法正确读取PATH环境变量的土办法

发布时间:2017-06-11 00:02:30来源:linux网站作者:hawkyoung
用 Crontab 调用一个shell脚本做定时任务,单独运行的时候可以,Crontab调用时候不行,除了常见的没有写绝对路径问题,还有一个大问题就是Crontab的运行环境是取不到用户的$PATH等一系列环境变量。当然也有说法是部分Linux系统存在上述问题。
 
为了测试这个问题,可以起一个测试的定时任务,echo $PATH > 一个log文件的绝对路径,然后打开这个log文件看看,如果只有孤零零的“/usr/bin:/bin”这样三四个值,而你定义的都不在里头,那么你使用的系统存在上述问题。奇怪的是,如果我使用crontab -e添加定时任务,打出用户名,确实是我的用户名。
 
最土的解决方法就是export PATH什么都写进去。或者source /etc/profile手动加载环境变量。
 
但是有时候脚本的PATH不是你决定的,是由另一个复杂的脚本来自动配置的,甚至这个脚本都不是你自己写的。那么可以使用:
https://unix.stackexchange.com/questions/148133/how-to-set-crontab-path-variable
“simple workaround for adding your regular PATH in shell commands in cron is t have the cronjob source your profile by running bash in a login shell. for example instead of
* * * * * some command
You can instead run
* * * * * bash -lc some command
That way if your profile sets the PATH or other environment variables to something special, it also gets included in your command.”
 
把你的整个定时脚本用bash -lc xxxx.sh再包一层调用就可以了,在我的Ubuntu12 server上测试通过。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/31397.html