Linux crontab简介
Linux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于 /etc/crontab
文件中,以供之后读取和执行。
cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。
linux 任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
crontab 命令
crontab命令是 cron table
的简写,它是 cron 的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。
/var/spool/cron/
目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名/etc/crontab
这个文件负责调度各种管理和维护任务。/etc/cron.d/
这个目录用来存放任何要执行的crontab文件或脚本。
/etc/crontab
1 | more /etc/crontab |
/var/spool/cron
每个用户都会生成一个自动生成一个自己的 crontab
文件,一般位于 /var/spool/cron
目录下
1 | cd /var/spool/cron |
如果你用命令 crontab -r
就会删除当前用户的crontab文件,例如你切换到oracle账号下,执行了该命令,那么 /var/spool/cron/oracle
文件就会删除,如果要创建该文件只需要用 crontab -e
命令即可。注意,普通用户一般没有权限访问 /var/spool/cron
我们还可以把脚本放在 /etc/cron.hourly
、/etc/cron.daily
、/etc/cron.weekly
、/etc/cron.monthly
目录中,让它每小时/天/星期、月执行一次。
系统管理员可以通过 cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。
/etc/cron.deny
表示不能使用 crontab
命令的用户
/etc/cron.allow
表示能使用 crontab
的用户。
默认情况下,cron.allow
文件不存在。如果两个文件同时存在,那么 /etc/cron.allow
优先。如果两个文件都不存在,那么只有超级用户可以安排作业。
ls -lrt cron*
1 | ls -lrt cron* |
CRONTAB在线手册
注意:不同版本的Linux系统,可能crontab手册内容有所出入,请以实际版本为准。
1 | man crontab | more |
注意事项
配置定时任务时,需要注意两个问题:
1: 在SHELL中设置了必要的环境变量;例如一个shell脚本手工执行OK,但是配置成后台作业执行时,获取不到ORACLE的环境变量,这是因为crontab环境变量问题,Crontab的环境默认情况下并不包含系统中当前用户的环境。所以,你需要在shell脚本中添加必要的环境变量的设置
2: 尽量所有的文件都采用完全路径方式,避免使用相对路径。
参考: