crond 简介
crond 是 Linux 中用来周期性的执行某种任务或等待处理某些事情的一个守护进程(后台程序运行不受终端控制的进程),和 windows 下的计划任务相似
当安装完系统操作系统后,默认会安装此工具,并且会自动启动 crond 进程,crond 进程每分钟都会定期检查是否有要执行的任务,如果有要执行的任
务,则自动执行该任务。
Linux 下的调度任务分为两种:系统任务调度和用户任务调度。
系统任务调度:系统本身周期性所要执行的工作,比如:写缓存数据到硬盘、日志清理等等。
/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
前四行是用来配置 crond 任务运行的环境变量。
第一个 SHELL 变量指定了系统使用哪个 shell ,这里是 bash;
第二个 PATH 变量指定了系统执行命令的路径;
第三个变量 MAILTO 变量指定了 crond 的任务执行信通过电子邮件发送给 root;
第四个 HOME 变量指定了在执行命令或脚本时使用的主目录
用户任务调度:用户定期要执行的工作,比如:用户数据备份、定时邮件提醒等等。用户可以通过 crontab 工具
来定制自己的计划任务,所有用户自定义的 crond 任务都被保存在 /var/spool/cron 目录中,文件名与用户名一致。
使用者权限文件
/etc/cron.deny
说明:该文件中所列用户不允许执行 crontab 命令。
/var/spool/cron/
说明:所有用户自定义的 crond 任务都被保存在 /var/spool/cron 目录中,文件名义用户名命名
crontab 文件的含义
用户所建立的 crontab 文件中,每一行都表示一项任务,每一行的每个字段代表一项设置,它的格式分为6个字段,前5段
表示时间设置,第六段表示要执行的命令,格式如下:
minute hour day month week command
其中:
minute 表示分钟,取值范围:0~59之间的任意整数。
hour 表示小时,取值范围:0~12之间的任意整数。
day 表示天,取值范围:1~31 之间的任意整数。
month 表示月,取值范围:1~12之间的任意整数。
week 表示星期几,取值范围:0~7之间的任意整数,0或7表示星期日。
在以字段中,还可以使用下面这些字符:
* 星号,表示任意,代表所有可能的值,例如,month字段如果是星号,则表示在满足其他字段的制约条件后每月都执行该命令操作 ,逗号分隔表示时刻,例如,在minute字段出现 1,2,5 表示在第1分钟、第2分钟、第5分钟 - 中划线连接,表示时间段,例如,2-6表示2,3,4,5,6 / 表示间隔,如果第一个域为 /2 表示每隔两分钟
crond 服务
安装 crontab:
yum install crontabs
服务操作说明:
/sbin/service crond start // 启动服务 /sbin/service crond stop // 关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload // 重载配置文件
查看 crontab 服务状态:
service crond status
手动启动 crontab 服务:
service crond start
查看 crontab 服务是否已经加入开机自启动以及加入开机自启动:
ntsysv(使用tab键切换确定或取消按钮) chkconfig --level 35 crond on
crontab 命令详解
1.命令格式
crontab [-u user] file crontab [-u user] [-e | -l | -r]
2.命令参数
-u user 用来设定某个用户的crontab服务。比如:-u xiaoming 表示设定xiaoming用户的crontab服务,这个参数由root用户运行 file 是命令文件的名字,表示将file的任务列表文件载入crontab,也就是用指定的命令文件去代替crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入上键入的命令,并将它们载入crontab -e 编辑某个用户的crontab文件内容。如果没有明确指定用户,则表示编辑当前用户的crontab文件内容 -l 列出某个用户的crontab文件内容。如果没有明确指定用户,则表示列出当前用户的crontab文件内容 -r 从 /var/spool/cron 目录删除某个用户的 crontab 文件。如果没有明确指定用户,则表示删除当前用户的crontab文件内容 -i 在删除用户 crontab 文件内容时给出确认提示
3.常用方法
3.1 创建一个新的 crontab 文件
创建一个名为 <user> cron 文件,其中 <user> 是用户名,例如:xiaoming 在该文件中加入如下内容。
# (put your own initials here)echo the date to the console every # 15minutes between 6pm and 6am
# 表示每天上午6点和下午6点,每隔15分钟输出当前系统时间 0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
保存并且退出,确保前面5个域用空格分隔。执行 crontab xiaoming 命令用指定的命令文件去代替crontab
3.2 列出 crontab 文件
[root@VM_81_181_centos ~]# crontab -l # (put your own initials here)echo the date to the console every # 15minutes between 6pm and 6am 0,15,30,45 06-18 * * * /bin/echo 'date' > /dev/console [root@VM_81_181_centos ~]#
另外为了防止误删 crontab 文件,我们可以在 $HOME 目录中对 crontab 文件做备份
crontab -l > $HOME/mycron
3.3 编辑 crontab 文件
如果希望添加、删除或编辑 crontab 文件,可以使用 crontab -e 命令
例如,加入下面这样一条:
# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month 30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} ;
表示:每个月的第1、7、14、21、26天的上午3:30删除 core 文件
最好在 crontab 文件的每一个条目之上加入一条注释,这样可以知道可以知道它的功能、运行时间、还能知道是哪一位用户的作业
3.4 删除 crontab 文件
crontab -r
实际用例
#Example 01 每1分钟执行一次command
* * * * * command
#Example 02 每小时的第3和第15分钟执行command
3,15 * * * * command
#Example 03 在上午8点到11点的第3分钟和第15分钟执行
3,15 8-11 * * * command
# Example 04 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 /2 * * command
#Example 05 每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
#Example 06 每晚的21:30 重启smb
30 21 * * * /etc/init.d/smb restart
#Example 07 每月1、10、22日的4:45重启smb
45 4 * 1,10,22 * /etc/init.d/smb restart
#Example 08 每周六、周日的1:10重启smb
10 1 * * 6,7 /etc/init.d/smb restart
#Example 09 每天18:00 至23:00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
#Exmaple 10 每周六晚上11:00重启smb
0 23 * * 6 /etc/init.d/smb restart
# Example 11 每一个小时重启smb
* */1 * * * /etc/init.d/smb restart
#Exmaple 12 晚上11点到早上7点之间,每隔一个小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
#Example 13 每月4号与每周一到每周三的11点重启smb
0 11 4 * 1-3 /etc/init.d/smb restart
#Example 14 一月一号的4点重启smb
0 4 1 1 * /etc/init.d/smb restart
注意:新建的 cron job,不会马上执行至少要等2分钟才执行
当 cron 突然失效时,可以尝试 /etc/init.d/crond restart 解决问题,或者查看日志看某个 job 有没有执行报错:tail -f /var/log/cron
文章转载地址:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html