crontab定时器

前言
无论是做开发还是做运维的程序猿,crontab命令是必须用到的命令,特别是对于运维的人,自动化运维中,crontab也属于其一。然而就来记录常用的crontab定时处理命令。

crontab简介
简而言之呢,crontab就是一个自定义定时器。

crontab配置文件

其一:/var/spool/cron/
该目录下存放的是每个用户(包括root)的crontab任务,文件名以用户名命名
其二:/etc/cron.d/
这个目录用来存放任何要执行的crontab文件或脚本。

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

1.命令格式

crontab [-u user] file crontab [-u user] [ -e | -l | -r ]
命令参数
-u user:用来设定某个用户的crontab服务;
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。

2.crontab的文件格式

minute:代表一小时内的第几分,范围 0-59。
hour: 代表一天中的第几小时,范围 0-23。
mday: 代表一个月中的第几天,范围 1-31。
month:代表一年中第几个月,范围 1-12。
wday: 代表星期几,范围 0-7 (0及7都是星期天)。
who: 要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。
command:所要执行的指令。

3. 常用方法

创建一个新的crontab文件
向cron进程提交一个crontab文件之前,首先要设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$HOME目录下的. profile文件,在其中加入这样一行:

EDITOR=vi; export EDITOR
然后保存并退出。不妨创建一个名为 cron的文件,其中是用户名,例如, davecron。在该文件中加入如下的内容。
#(put your own initials here) echo the date to the console every
#15minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo ‘date’ > /dev/console
保存并退出。注意前面5个域用空格分隔。

在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,*从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为cron命令的参数:
$ crontab davecron
现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。同时,
新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。
列出crontab文件
使用-l参数列出crontab文件:
$ crontab -l
0,15,30,45 18-06 * * * /bin/echo date > dev/tty1
可以使用这种方法在HOME目录中对crontab文件做一备份:∗HOME目录中对crontab文件做一备份: *HOME目录中对crontab文件做一备份:∗ crontab -l > $HOME/mycron
这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。
编辑crontab文件
如果希望添加、删除或编辑crontab文件中的条目,而EDITOR环境变量又设置为vi,那么就可以用vi来编辑crontab文件:
$ crontab -e
可以像使用vi编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, cron会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。 我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name ‘core’ -exec rm {} ;
保存并退出。
注解
最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的定时作业。

4. 使用注意事项

注意环境变量问题
有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
脚本中涉及文件路径时写全局路径;
系统级任务调度与用户级任务调度
系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行,root用户的任务调度操作可以通过”crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。
其他注意事项
新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
当crontab失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’。
更新系统时间时区后需要重启cron,在ubuntu中服务名为cron:
$service cron restart
ubuntu下启动、停止与重启cron:
$sudo /etc/init.d/cron start
$sudo /etc/init.d/cron stop
$sudo /etc/init.d/cron restart
crontab服务状态

sudo service crond start     #启动服务
sudo service crond stop      #关闭服务
sudo service crond restart   #重启服务
sudo service crond reload    #重新载入配置
sudo service crond status    #查看服务状态

crontab命令
重新指定crontab定时任务列表文件

crontab $filepath
查看crontab定时任务

crontab -l
编辑定时任务【删除-添加-修改】

crontab -e
添加定时任务【推荐】
Step-One : 编辑任务脚本【分目录存放】【ex: backup.sh】
Step-Two : 编辑定时文件【命名规则:backup.cron】
Step-Three : crontab命令添加到系统crontab backup.cron
Step-Four : 查看crontab列表 crontab -l

crontab时间举例

# 每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
# 每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
# 晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
# 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
# 1月1日早上4点
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/
# 每小时(第一分钟)执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
# 每天(凌晨4:02)执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily
# 每星期(周日凌晨4:22)执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly
# 每月(1号凌晨4:42)去执行/etc/cron.monthly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly
# 注意:  "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。  
# 每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * * command
# 每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
00 15 * *1,3,5 shutdown -r +5
# 每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
10,40 * * * * innd/bbslink
# 每小时的1分执行用户目录下的bin/account这个指令:
1 * * * * bin/account
# 每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):

crontab定时器相关推荐

  1. shell脚本触发java程序支持传参补跑 +crontab定时器+每天生成日期文件_03

    文章目录 1. 脚本升级 2. 执行测试 3. 脚本关键词简述 补充案例 上一篇: shell脚本触发java程序支持传参补跑 +crontab定时器_02 https://gblfy.blog.cs ...

  2. shell脚本触发java程序支持传参补跑 +crontab定时器_02

    文章目录 1. 创建定时任务 2. 查看定时任务是否执行 上一篇: shell脚本触发java程序支持传参补跑_01 https://gblfy.blog.csdn.net/article/detai ...

  3. linux tab的含义,理解Linux中crontab定时器里的 21 含义 - 金牛座, 爬山虎, PHPCreeper, Workerman, Swoole, PHP爬虫引擎, PHP爬...

    在crontab定时器中有如下类似的脚本: 0 2 * * * php /data/test/test.php >/dev/null 2>&1 & 其中 > 代表重定 ...

  4. Linux——Crontab定时器

    Crontab定时的使用 定时:定时器最重要的在于定时上,让我们看看Crontab是如何设置定时规则的. [root@VM-24-14-centos cron]# cat /etc/crontab S ...

  5. linux shell crond crontab 定时器 计划任务 定时任务

    一.crontab是什么? 1.定时任务软件种类 at 适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务.  crontab 需要启动一个服务crond才行,crond服务通过cronta ...

  6. ubuntu下使用crontab定时器

    crontab 定时工具(周期性执行的任务列表称为Cron Table),其中每一个任务,被称为Cron Job. 可以,每分钟执行,每小时执行,每天执行,每周执行,每月执行. 检查服务 1.查看任务 ...

  7. crontab定时器和ntp时间同步

    crontab [选项] 选项 英文 含义     -e              edit                           编辑crontab定时任务     -l        ...

  8. crontab定时器执行.sh脚本

    Linux 的crontab,执行shell脚本的时候,异常问题整理 整理的原因是:crontab测试真的太耗费时间了! 一.crontab中的脚本不执行,单独执行shell脚本没问题,放cronta ...

  9. linux定时器crontab的使用

    在服务器上用crontab定时器定时运行程序的具体操作,以下为使用crontab设定定时任务的操作: (1)要在root用户权限下操作crontab (2)检验服务器上是否有crontab定时任务 在 ...

  10. Linux | crontab定时任务及开机自启项

    本文总结如何使用 crontab 创建定时任务及开启自启项 1. 本文基于 CentOS 7.9 系统所写. Updated: 2022 / 9 / 5 Linux | crontab定时任务及开机自 ...

最新文章

  1. Redis实战(2)安装和试用
  2. Query Specific Fusion for Image Retrival 学习日常
  3. java面板如何设置大小_java面板调整大小问题
  4. AutoML:机器学习的下一波浪潮
  5. Linux系统编程:验证kernel内核缓存区大小-4096字节
  6. 为什么我们要阅读源码?
  7. 可以替代basemap的几个工具
  8. awx文件解析,运用NCL处理风云卫星2E的AWX格式数据的总结
  9. 6120c手机使用教程大全!
  10. CSS实现背景图片透明文字不透明效果的两种方法
  11. 凯西与拜耳将在中国共同推广呼吸药物宝丽亚和启尔畅
  12. 安卓Apk安装过程,社招面试心得
  13. FFmpeg源码分析:音频滤镜介绍(上)
  14. LaTeX 表格和图片在文中引用时编号显示问题
  15. 苏州职业大学计算机考试成绩查询系统,苏州工业园区职业技术学院教务管理系统登录入口、成绩查询网上选课查分...
  16. 华擎计算机主板配置,组装的华擎主板win10改win7系统及bios设置教程
  17. 【AI】Java+Fileupload+JSTL+Face++实现人脸识别系统
  18. 2020最新版LaTeX软件教程---Tex live 2020的安装与使用
  19. Android TV-Recyclerview添加按键音
  20. 【人工智能】自动化编程的历史,现状,发展与未来

热门文章

  1. 如何在VSCode上新建Flutter项目【两步搞定】
  2. Eclipse 中如何设置字体大小与样式
  3. HTML5 — 知识总结篇《V》【a元素】
  4. 文本输入框,实现模糊搜索结果
  5. 《深入理解Java虚拟机》读书笔记十二
  6. ios整理(五)小应用-重力感应
  7. 引擎设计跟踪(九.2) 3DS MAX 导出插件 继续
  8. 搭建html5的,HTML5 - 搭建移动Web应用
  9. php扩展传参,c写php扩展传参学习记录
  10. HCIE Security AC的准入技术 备考笔记(幕布)