在脚本最前面加上一句:
source ~/.bash_profile
这样运行环境就一摸一样了。加上这句后,直接执行能成功的脚本放在crontab里都能执行。
所有的crontab问题只有两种可能,
1,环境
2,路径
而第二种问题往往又是第一种问题引起的,所以加上.bash_profile里的环境后99%的问题都一招通杀。
.bash_profile会读取.bashrc
.bashrc 会读取 /etc/bashrc
/etc/bashrc 会读取 /etc/profile
一个Linux所有的系统用户,所有的环境变量,都逃不出以上几个文件。(前提是你用bash)
当使用crontab执行sh脚本时,发现存到数据库的数据丢失了非常多,困惑。。。于是各种搜索,终于找到问题答案,即环境变量问题,解决方法很简单,只需要在脚本开头增加
source ~/.bash_profile 即可。
还有,如果手动执行脚本可以成功运行,但crontab却不行,并且crontab执行脚本时报 Permission denied 错误,则是crontab没有执行脚本的权限,所以可以使用chmod 755 脚本 来授予crontab执行此脚本的权限。
总结下:使用crontab出现的问题基本上是在1.环境变量 2.路径 这两个方面 ,所以以后碰到此类问题,就先解决它