[整理]Linux Crontab命令总结

一、crontab命令的基本介绍

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。
通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

二、开启crontab日志

crontab默认情况下是不执行开启日志的,所以一开始写完后,不能执行,想查看日志,却找不到。所以先开启定时任务的日志来查看
修改rsyslog服务,将 /etc/rsyslog.d/50-default.conf 文件中的 #cron.* 前的 # 删掉;用以下命令重启rsyslog服务:

service rsyslog restart;
``
然后再重启crontab服务:

service cron restart;

网上很多人说开启,停止或者重启contab服务用命令 service crond restart,执行这个命令会报出 unrecognised service ,
这里把 crond 改成 cron 就可以了。

下面这个命令还可以查看crontab的状态

service crond status; //ubuntu,Debian使用cron,Redhat使用crond


# 三、cron相关操作
/sbin/service crond start      //启动服务
/sbin/service crond stop      //关闭服务
/sbin/service crond restart  //重启服务
/sbin/service crond reload  //重新载入配置
service crond status  //查看crontab服务状态
service crond start  //手动启动crontab服务

crontab -l 查看当前用户的定时任务
crontab -u root -l查看root用户的定时任务

crontab -e  编辑crontab  如果需要root用户执行的权限,需要用sudo crontab -e 写在另一个配置文件中
crontab -r  删除crontab


# 四、创建bash脚本并设定cron定时执行

建立一个用定时任务跑的bash脚本:
[root@root test]# touch test.sh
[root@root test]# vim test.sh

编辑如下内容,将系统当前时间输出到 console.txt 文件然后保存,增加可执行权限
/bin/echo date > /home/admin/test/console.txt

[root@root test]# ll
total 8
-rw-r--r-- 1 root root 29 Mar 27 21:31 console.txt
-rwxr-xr-x 1 root root 48 Mar 27 21:28 test.sh

[root@root test]# chmod +x ./test.sh

追加 crontab 定时任务,每分钟触发:
[root@root test]# crontab -e
00 02 * * * sh /home/admin/optbash/dailyBackup.sh
00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh

          • sh /home/admin/test/test.sh
            前面是已经存在的定时任务,后面执行test.sh脚本的是追加的

保存后提示已经装载了新的定时任务
"/tmp/crontab.HauiiV" 3L, 143C written
crontab: installing new crontab
再次查看定时任务列表,可以看到定时任务已经添加

[root@root test]# crontab -l
00 02 * * * sh /home/admin/optbash/dailyBackup.sh
00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh

          • sh /home/admin/test/test.sh
            [root@root test]#
            查看console.txt有没有每分钟写入console.txt文件

[root@root test]# vim console.txt
Fri Mar 27 21:40:01 EDT 2015
可以看到最近一次的写入时间。



# 五、crontab时间设定理解

## 操作符号
    在一个区域里填写多个数值的方法:
    逗号(',')分开的值,例如:“1,3,4,7,8”
    连词符('-')指定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”
    星号('*')代表任何可能的值。例如,在“小时域”里的星号等于是“每一个小时”,等等
    某些cron程序的扩展版本也支持斜线('/')操作符,用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数;

## crontab格式说明
![](http://images2017.cnblogs.com/blog/1225554/201710/1225554-20171009113944590-2129369827.png)

    1.命令格式:
        crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
    2.命令功能:
        通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。
    3.命令参数:
        -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
        file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
        -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
        -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
        -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
        -i:在删除用户的crontab文件时给确认提示。


# 五、crontab使用实例

实例1:每1分钟执行一次command
命令:
* * * * * command
 
实例2:每小时的第3和第15分钟执行
命令:
3,15 * * * * command
 
实例3:在上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 * * * command
 
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 */2 * * command
 
实例5:每个星期一的上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 * * 1 command
 
实例6:每晚的21:30重启smb 
命令:
30 21 * * * /etc/init.d/smb restart
 
实例7:每月1、10、22日的4 : 45重启smb 
命令:
45 4 1,10,22 * * /etc/init.d/smb restart
 
实例8:每周六、周日的1 : 10重启smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart
 
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb 
命令:
0,30 18-23 * * * /etc/init.d/smb restart
 
实例10:每星期六的晚上11 : 00 pm重启smb 
命令:
0 23 * * 6 /etc/init.d/smb restart
 
实例11:每一小时重启smb 
命令:
* */1 * * * /etc/init.d/smb restart
 
实例12:晚上11点到早上7点之间,每隔一小时重启smb 
命令:
* 23-7/1 * * * /etc/init.d/smb restart
 
实例13:每月的4号与每周一到周三的11点重启smb 
命令:
0 11 4 * mon-wed /etc/init.d/smb restart
 
实例14:一月一号的4点重启smb 
命令:
0 4 1 jan * /etc/init.d/smb restart
实例15:每小时执行/etc/cron.hourly目录内的脚本
命令:
01   *   *   *   *     root run-parts /etc/cron.hourly
说明:
run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了



拓展阅读:
1、[每天一个linux命令(50):crontab命令](http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html)
2、[Linux 下执行定时任务 crontab 命令详解](https://segmentfault.com/a/1190000002628040)
3、[cron维基百科](https://zh.wikipedia.org/wiki/Cron)
4、https://www.linuxidc.com/Linux/2015-10/124110.htm
posted @ 2017-10-09 11:43  bingo彬哥  阅读(444)  评论(0编辑  收藏  举报
本站总访问量