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
2. https://blog.csdn.net/gjggj/article/details/72922036