【Linux】Linux命令:crontab
目录
- 1、作用
- 2、命令使用格式
- 3、常用参数说明
- 4、时程表
- 4.1 格式
- 4.2 常见问题处理
- 5、示例
1、作用
crontab
命令用于对用户的时程表进行查看、删除、修改等操作。
用户的时程表是用于记录着要定期执行的程序。当安装完Linux
操作系统启动后, cron
服务会定期执行时程表里的程序。所以,通过crontab
命令我们就可以实现定期执行某些脚本。
2、命令使用格式
crontab [ -u user ] { -l | -r | -e }
3、常用参数说明
-u user
:指定用户。表示对指定用户的时程表进行操作。未指定时,默认是执行该命令的用户。-e
:启动文字编辑器来设定时程表,内定的文字编辑器是Vim
。-r
:删除目前的时程表-l
:列出目前的时程表
4、时程表
4.1 格式
时程表每一行代表一个要定期执行的程序,每一行的格式如下:
f1 f2 f3 f4 f5 program
- f1 表示分钟(0 - 59);
- f2 表示小时(0 - 23);
- f3 表示一个月份中的第几日(1 - 31);
- f4 表示一年的第几个月(1 - 12);
- f5 表示一个星期中的星期几(0 - 6);
- program 表示要执行的程序;
注意
f1 ~ f5
都是用来设定程序的执行周期的,一个f
就是一个条件,这5个条件要同时满足,程序才会执行。
f1 ~ f5
的取值主要有以下几种情况:
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,以此类推;
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,以此类推;
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,以此类推;
- 当 f1 为 */n 时表示每 n 分钟执行一次,f2 为 */n 表示每 n 小时执行一次,以此类推;
- 当 f1 为 a-b/n 时表示从第 a 分钟到第 b 分钟这段时间内每 n 分钟执行一次,f2 为 a-b/n 时表示从第 a 到第 b 小时这段时间内每 n 小时执行一次,以此类推;
4.2 常见问题处理
时程表中的程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1
即可,如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1
时程表中的脚本无法定时执行,但是在shell会话中可以正常执行。这个问题的主要原因是无法读取环境变量的原因。 解决方法有以下三种:
-
1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
-
2、在 shell 脚本开头使用以下代码:
#!/bin/sh . /etc/profile . ~/.bash_profile
-
3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh
5、示例
0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令