linux定时任务

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

/etc/crontab文件包括下面几行:

[root@localhost ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=""HOME=/

# run-parts

1 0 * * * sh root /home/xg/test.sh 

前四行用来配置crond任务运行的环境变量:

  • 第一行SHELL变量指定了系统要使用哪个shell,这里是bash
  • 第二行PATH变量指定了系统执行命令的路径
  • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
  • 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录

1、vim /etc/crontab查看格式,也可直接在此文件下按照格式添加任务

2、crontab -e 编辑用户的crontab文件

3、service crontab restart 重启一下(貌似不重启也OK的)

4、基本格式 :
    *  *  *  *  *  command
    分  时  日  月  周    命令

  eg: 1 0 * * * sh root /home/xg/test.sh   每天00:01执行test.sh脚本

5、注意事项

1)绝对路径:定时任务语句以及要执行的脚本中涉及到路径的统统写成绝对路径

2)环境变量:有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。

脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:source /etc/profile

当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。即/etc/crontab的第二行。

3)新创建的cron job,可能不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。

4)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’。

原文地址:https://www.cnblogs.com/xingguang1130/p/8882882.html