Linux 定时任务没有执行

手动执行脚本正常,定时任务总是不执行解决方案:

  1. 首先检查crond任务是否正常:service crond status
    重启下定时任务:service crond stop、service crond start 、service crond restart

  2. 在调度的脚本中加载环境变量试试 脚本中添加 source /etc/profile

crontab -e编辑定时任务时加上./etc/profile; 与在脚本里加 source /etc/profile 效果一样,例如0 6 * * * ./etc/profile;sh /home/hadoop/ktl_wks/start_1.sh

crontab其实并不知道定时脚本所需要的特殊环境,所以在脚本中要提供所有必要的路径和环境变量,要注意以下:

  • 脚本中涉及文件路径时写全局路径
  • 脚本执行要用到java或其他环境变量时,通过source命令引入环境变量
  • 当手动执行脚本OK,但是crontab 不执行时。一般都是环境变量惹的祸,可以尝试在crontab中直接引入环境变量或者在脚本中加载环境变量解决问题
  • 新创建的定时任务,至少要过2分钟才可以执行,如果重启crontab则可以马上执行。
  • 每条定时任务执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,会给系统造成负担, 所以每条定时任务命令后面最好进行重定向处理(定时任务执行的结果正常输出并已经作了一定的处理,,例如追加到某个特定日志文件): >/dev/null 2>&1 例如 0 8 * * * /home/hadoop/ktl_wks/start_JXC_DD.sh >> /home/hadoop/ktl_wks/start_JXC_DD_run.log 2>&1
  • crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看定时任务日志看是否有执行报错:tail -100f /var/log/cron
  • crontab%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,所以date +%Y%m%dcrontab里是不会执行的,要换成date +\%Y\%m\%d
  • 命令 crontab -r 会删除该用户的所有crontab定时任务。删除crontab目录 /var/spool/cron 中用户的Crontab文件,定时任务就没有了,所以这个命令危险性很大。
发布了52 篇原创文章 · 获赞 7 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/hyfstyle/article/details/100521248