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’。