linux系统任务调度命令crontab
Posted 小快马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统任务调度命令crontab相关的知识,希望对你有一定的参考价值。
循环重复的执行计划任务、有计划性的执行任务,像这种任务,在linux系统中就有cron命令来完成。
linux系统下的任务调度分为两类:系统任务调度和用户任务调度。
/etc/crontab文件就是系统任务调度的配置文件:
[root@centos ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
[root@centos ~]#
前四行是配置crond任务运行的环境变量,第一行SHELL变量指定了使用/bin/bash,第二行PATH变量指定了系统执行命令的路径。第三行MAILTO变量指定了cron的任务执行信息将发送给root用户,第四行HOME变量指定了在执行命令或者脚本时使用的主目录,
用户任务调度:用户顶起要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron/目录中,其文件名和用户名保持一致。
文件:
/etc/cron.deny #该文件中所列用户不允许使用crontab命令
文件:
/etc/cron.allow #该文件中所列用户允许使用crontab命令
文件:
/var/spool/cron/ #所有用户crontab文件存放的目录,以用户名命名
crontab的使用格式:minute hour day month week command
如果minute使用*表示,则代表每分钟,可取0-59之间的整数。一次类推。
command表示要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
crond服务是集成在系统上的,哪怕是安装最小化系统,这项服务也会被安装上。
crontab 命令格式: crontab [ –u user ] file
crontab [ -u user ] [ –e ] [ –l ] [ –r ] [ –i ]
crontab –u jack 表示使用jack这个用户来运行命令
-e参数的意思是“编辑” -l参数的含义是“查看计划任务” -r参数的含义是“删除计划任务”这个参数会删除/var/spool/cron目录下的所有几乎任务。-i参数的意思是在删除用户的crontab文件是给确认提示。给出交互提示。
实例: 0 4 1 jan * /etc/int.d/smb restart #1月1号早上4点整重启smb服务。
01 * * * * root run-parts /etc/cron.hourly #每小时以root用户的身份执行/etc/cron.hourly目录下的所有脚本。 注:如果去掉run-parts参数的话,目录后面就必须跟上某个具体的脚本,而不能是某个文件夹。
注意:
1. 如果我们创建了一个crontab文件,但是任务无法执行,而手动执行这个任务是没有问题的。这种情况下一般是由于在crontab文件中没有配置环境变量引起的。
2. 注意清理系统用户的邮件日志,每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件传递给用户,改信息一般保存在/var/spool/mail目录下。这样日积月累,这个目录下的日志信息会非常大,可能会影响系统的正常运行。因此将每条任务执行后进行重定向非常重要。
例:0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
>/dev/null的意思是将输出信息清除,2>&1的意思是将标准错误重定向到标准输出,而标准输出已经重定向到了/dev/null中,所以无论是标准输出还是标准错误都会重定向到/dev/null中。
另外,新建的cron job不会立马执行,至少要等两分钟才能执行,如果重启cron才会马上执行。
当crontab突然失效时,可以重启cron服务;或者查看日志:tail -f /var/log/cron
以上是关于linux系统任务调度命令crontab的主要内容,如果未能解决你的问题,请参考以下文章