一般情况下,定时脚本我们都会先手动执行一次看时候运行正常,然后放在crontab中定时执行,大部分时候定期执行时正常的,少数情况下执行会失败或者和预期不符
一:定时任务执行失败
首先,一定要把放在crontab中的代码带着绝对路径执行一遍,crontab怎么执行就怎么执行,crontab执行命令前有sh就带sh,crontab没有sh就不要带sh
手动执行成功而定时执行失败,这个一般都是手动执行和定时执行的环境变量不一致导致,所以为了定时执行,我们一般会把手动执行的环境变量在脚本中source一下,如下所示
source ~/.bashrc
source ~/.bash_profile
这两个命令正常情况下能解决所有手动执行正常crontab无法正常执行的问题
当然,最基本的是要给脚本授权可执行,一般将所有涉及的脚本直接chmod 755即可
还有一种情况就是各种命令文件等使用绝对路径,如java要用/nemo/jdk/jre/bin/java这种格式,能用绝对路径的尽量用绝对路径
二:手动执行和定时执行的结果不一致或者乱码等问题
一般这种也是环境变量问题,手动执行的环境变量除了上面的source文件之外,还有可能是我们手动export或者set或者通过options进行设置了,这时候手动执行带有这些环境变量,而自动执行没有带这些变量,这时候就要对比一下是否有些环境变量没有source进去,比如字符集编码,我们可以用locale或者export查看,发现LANG="zh_CN.UTF8",但是crontab执行还是乱码,这个时候我们可以检查一下~/.bashrc并在文件中加入
export LANG="zh_CN.UTF8"
这时候crontab中定时命令执行过程中的中文乱码就会变正常了