crontab详解


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

1. 安装crontab

yum -y install vixie-cron
yum -y install crontabs

说明:
vixie-cron 软件包是 cron 的主程序;
crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

 

2. 操作命令

cron 是 linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

systemctl start   crond    #启动服务
systemctl stop    crond    #关闭服务
systemctl restart crond    #重启服务
systemctl reload  crond    #重新载入配置
systemctl status  crond    #查看crontab服务状态
systemctl enable  crond    #开启开机自动启动
systemctl disable crond    #禁止开机自动启动

 or

/sbin/service crond start    #启动服务
/sbin/service crond stop     #关闭服务
/sbin/service crond restart  #重启服务
/sbin/service crond reload   #重新载入配置
ntsysv                       #查看crontab服务是否已设置为开机启动
chkconfig –level 35 crond on #开机自动启动

 

 

3.cron配置

cron 的主配置文件是 /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
  • 前四行是用来配置 cron 任务运行环境的变量。 SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);
  • PATH 变量定义用来执行命令的路径。
  • cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。
  • 如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。
  • HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

 

4.限制对 cron 的使用

/etc/cron.allow/etc/cron.deny 文件被用来限制对 cron 的使用。

  • 这两个使用控制文件的格式都是每行一个用户。 两个文件都不允许空格。
  • 如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
  • 使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
  • 无论使用控制文件中的规定如何,root 都总是可以使用 cron。
  • 如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
  • 如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。

 

介绍crontab文件
        /etc/crontab
        在这个文件里并没有记录系统要执行哪些工作,而是记录了下面四个子目录。
        /etc/cron.hourly
        /etc/cron.daily
        /etc/cron.weekly
        /etc/cron.monthly
        这些子目录里存放了一些脚本,到了crontab所指定的时间点,系统就会去执行这些子目录里的脚本。 

 

 5. crontab 命令

 

5.1 功能

设置计时器。

 

5.2 语法

crontab[-u <用户名称>][配置文件]  
#or
crontab [-u <用户名称>][-elr]

cron 是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:

 

Minute Hour Day Month DayOFWeek Command

 

参数说明:
-e 编辑该用户的计时器设置,如果不指定用户,则表示编辑当前用户的crontab文件
-l 列出该用户的计时器设置,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r 从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

-i  在删除用户的crontab文件时给确认提示。
-u user 用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

5.3 格式

*   *  *  *  *  command
分 时 日 月 周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

 

 

 

5.4 例子

 

30 21 * * * /usr/local/etc/rc.d/lighttpd restart       #每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart  #每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart      #每周六、周日的1 : 10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart  #每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart        #每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart       #每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart    #晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart  #每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart       #一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44           #每半小时同步一下时间

 

 6. set editor for crontab

for first edit of crontab -e, you will see the following contents:

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /usr/bin/emacs25
  5. /usr/bin/code
  6. /bin/ed

Choose 1-6 [1]: 

this asked us to select the editor for crontab, often, we use vim.tiny, so enter 3.

 

if we want to change the editor later, we can just type in select-editor in the shell terminal.

lenmom@M1701:~$ select-editor

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /usr/bin/emacs25
  5. /usr/bin/code
  6. /bin/ed

Choose 1-6 [1]: 

 

7. 编辑/etc/crontab 文件配置cron

cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/      //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本

注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了

 

8.Reference

1. https://tool.lu/crontab/

2.  https://blog.csdn.net/gjggj/article/details/72922036

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM