Linux crontab命令

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

原文地址:https://www.cnblogs.com/leeyongbard/p/10009747.html