每天一个Linux命令(44)crontab命令

Posted MenAngel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天一个Linux命令(44)crontab命令相关的知识,希望对你有一定的参考价值。

    crontab命令被用来提交和管理用户需要周期性执行的任务,与windows下的计划任务类似。

 

    (1)用法:

    用法: crontab  [-u user]  file

     crontab  [-u user]  [ -e | -l | -r ]

 

    (2)功能:

    功能:  当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。  

             在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

 

    (3)选项参数:

      1) -l         列出当前计时器的设置,查看定时运行的程序

      2) -e             编辑该用户的计时器设置,设置计时器

      3) -r        删除该用户的计时器设置

      4) -u<用户名称>  指定要设定计时器的用户名称

        

    (4)实例:(此命令用的不常,在此简要介绍)

      1)每1分钟执行一次command

* * * * * command

      2)每五分钟执行一次命令

 */5 * * * * command

     3)在每天的17:00执行这个命令

00 17 * * *  command

      4)在8:02,11:02,14:02,17:02,20:02 执行,在8点到20点的时间内,每三个小时执行一下命令

2 8-20/3 * * * command

     以后会讨论crondtab的几个用法:

 

     *创建一个新的crontab文件:

  1.进入 /var/spool/cron目录下(目录为空表明当前系统内没有任何Linux计划任务需要执行)

[root@localhost /]# cd /var/spool/cron
[root@localhost cron]# ll
总用量 0

 

     *列出crontab文件:

     2.用crontab自带的命令crontab -l 发现也是没有任何东西()

[root@localhost cron]# crontab -l
no crontab for root

 

     *编辑crontab文件;

    3.如果目录已经存在指定的文件(文件名为当前用户名),则crontab -e 命令编辑它,否则创建新的文件。cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次 /etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。

*/2 * * * * ls -l /home/sunjimeng/Documents > root.txt
* * * * * echo "I am MenAngel" > root.txt

 

     *删除crontab文件;

     恢复丢失的crontab文件;  

 

    (5)其他:

    1.什么是Windows的计划任务?

      在Windows中,系统有一项重要的“计划任务”功能,通过设置“计划任务”,你可以将每天或某一天的某个时间需要做的事拟成计划,到约定的时间,不管你在电脑上进行什么工作,系统都会提醒你或者启动你设定好的任务程序。

    2.crontab的简介:

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

    3.crontab文件:  

  crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。

    4.Linux下的任务调度

      Linux下的任务调度分为两类:系统任务调度和用户任务调度。

      系统任务调度:  系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件:

[root@localhost /]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。

 *: 表示任何时刻
  ,: 表示分割
-:表示一个段,如第二端里: 1-5,就表示1到5点
 /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.

      用户任务调度:  用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致。

[root@localhost /]# cd /var/spool/cron
[root@localhost cron]# ll
总用量 0
/etc/cron.deny       该文件中所列用户不允许使用crontab命令 
/etc/cron.allow      该文件中所列用户允许使用crontab命令
/var/spool/cron/    所有用户crontab文件存放的目录,以用户名命名

    5.crond服务

   1)安装crontab:

  yum install crontabs

      服务操作说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

  查看crontab服务状态:  service crond status

[root@localhost sunjimeng]# service crond status
Redirecting to /bin/systemctl status  crond.service
crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
   Active: active (running) since 五 2016-05-27 23:11:47 PDT; 1 weeks 5 days ago
 Main PID: 1303 (crond)
   CGroup: /system.slice/crond.service
           └─1303 /usr/sbin/crond -n

5月 27 23:11:47 localhost.localdomain systemd[1]: Started Command Scheduler.
5月 27 23:11:47 localhost.localdomain crond[1303]: (CRON) INFO (RANDOM_DELAY...
5月 27 23:11:48 localhost.localdomain crond[1303]: (CRON) INFO (running with...
Hint: Some lines were ellipsized, use -l to show in full.

  手动启动crontab服务:  service crond start

[root@localhost sunjimeng]# service crond start
Redirecting to /bin/systemctl start  crond.service

    查看crontab服务是否已设置为开机启动,执行命令:  ntsysv

[root@localhost sunjimeng]# ntsysv

       输入上述命令后,centOS弹出下面的页面:

  *加入开机自动启动:  chkconfig –level 35 crond on(以后再介绍)

      *要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start即可。

 

以上是关于每天一个Linux命令(44)crontab命令的主要内容,如果未能解决你的问题,请参考以下文章

每天一个Linux命令—— crontab

每天一个linux命令(50):crontab命令

每天一个linux命令(50):crontab命令

每天一个linux命令

Linux crontab 定时任务命令详解

Linux Crontab 定时任务 命令详解