Linux crond定时任务服务

简介:

Linux的定时任务服务crond(crontab)

crond是什么?

  crond是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件。

  一般在我们安装完C5/C6系统的时候,crond就会默认存在了。

  crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有就会根据事先定义好的规则来执行这个定时任务。如:root用户的定时任务配置文为/var/spool/cron/root。

  crond服务=闹钟

  默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致,

  crontab定时任务的书写格式很简单,用户的定时任务规则一般分为6个段(每个段通过空格来分隔,系统的定时任务为/etc/crontab,分为8段,空格来分隔),前五段时间的设定段,第六段为所要执行的命令或脚本任务段。


相关配置文件:

/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名

/etc/crontab 这个文件负责调度各种管理和维护任务。

/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

我们还可以把脚本放在/etc/con.hourly、/etc/con.daily、/etc/con.weekly、/etc/con.monthly目录中,让它每小时/天/星期、月执行一次。

/etc/cron.deny 该文件中所列用户不允许使用ctrontab命令。

/etc/cron.allow 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny

常用命令说明:

参数 含义 示例
-l(字母) 查看crontab文件内容。提示:l可理解为list的缩写。 crontab -l***
-e 编辑crontab文件内容,提示:e可理解为edit的缩写。 crontab -e***
-i 删除crontab文件内容,删除前会提示确认。用的很少。 crontab -ri
-r 删除crontab文件内容,用的很少。 crontab -r
-u user 指定使用的用户执行任务。 crontab -u zdw -l
特别强调:-i,-r参数在生产中很少用,没什么需求必须要用-e进去编辑即可。

  我们用crontab -e进入当前用户的工作表编辑,(crontab -e编辑会检查语法,而直接echo,vi编辑则不会检查语法。)每一行是一条编辑命令。


查看/etc/crontab文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@w ~] # cat /etc/crontab 
SHELL= /bin/bash
PATH= /sbin : /bin : /usr/sbin : /usr/bin
MAILTO=root
HOME=/
# 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

解释上图,crontab语法格式中时间段的含义如下:

   段   含义   取值范围
  第一段   代表分钟   00--59
  第二段   代表小时   00--23
  第三段   代表日,天   01--31
  第四段   代表月份   01--12
  第五段   代表星期,周几   0--7(0和7都代表周日)
时间记忆口决:分时日月周

crontab语法格式中特殊符号含义如下表:

特殊符号 含义
     *

*号,表示任意时间,实际就是“每”时间的意思。举例:如00 23 * * * cmd表示每月每周每日23:00都执行cmd任务。需要注意的是:每个时间位上的*表示每,如果位上是*就是该位上时间的取值范围,例如:小时上的*等价于00-23。

经验:定时任务规则如果到小时,就最多提到每天。不用说周等。

分位上的*就等价于0-59

     - 减号,表示分隔符,表示一个时间范围,区间段,如果17-19点,每天的17,18,19的00分执行任务。00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思。
     , 逗号,表示分隔时段的意思。30 17,18,19 * * * /bin/sh /scripts/zdw.sh表示每天17、18和19点的半点时刻执行/scripts/zdw.sh脚本。也可以和“-”结合使用,例如30 3-5,17-19 * * * /bin/sh /scripts/zdw.sh
     /n

n代表数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写

成*/10 * * * *,其中,*/10,*的范围是0-59,因此,也可以写成0-59/10。

我们如果创建了定时任务,但没有执行,需要查看crond服务不否启动,如没有启动,需要启动后才能使用定时任务。

查看和开启定时任务:

1
2
3
4
[root@w ~] # /etc/init.d/crond status               #查看crond服务状态                   
crond is stopped
[root@w ~] # /etc/init.d/crond restart              #重启crond服务
Starting crond:                                            [  OK  ]

命令示例:

1.30 3,12 * * * /bin/sh /scripts/zdw.sh

  在本例中,第一列为30,表示30分钟,第二列为3,12,这代表3点及12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或描述为每天凌晨3:30和中午12:30)执行/scripts/zdw.sh脚本。

2.30 */6 * * * /bin/sh /scripts/zdw.sh

  其中的第一列为30,表示30分钟,第二列*/6代表每6个小时,也相当于6,12,18,24的作用。

此定时任务的意思是每隔6个小时的半点时刻执行/scripts/zdw.sh脚本任务。

3.30 8-18/2 * * * /bin/sh /scripts/zdw.sh

  其中的第一列为30,表示30分钟,第二列8-12/2代表在早晨8点到下午18点之间每隔2小时,也相当于8,10,12,14,16,18单独列出的作用。

  那么,此定时任务的意思就是早晨8点到下午18点之间每隔2小时的30分钟时刻执行/scripts/zdw.sh脚本任务。

4.30 21 * * * /application/apache/bin/apachectl graceful

  上面的例子表示每晚的21:30重启apache。

5.45 4 1,10,22 * * /application/apache/bin/apachectl graceful

  上面的例子表示每月1、10、22日凌晨4:45分重启apache。

6.10 1 ** 6,0 /application/apache/bin/apachectl graceful

  上面的例子表示每周六、周日凌晨1:10分重启apache。

7.0,30 18-23 * * * /application/apache/bin/apachectl graceful

  上面的例子表示每天在18:00至23:00之间每隔30分钟重启apache。

8.00 */1 * * * /application/apache/bin/apachectl graceful

  上面的例子表示每隔一小时整点重启apache。

9.00 11 * 4 1-3 /application/apache/bin/apachectl graceful

  上面的例子表示4月的每周一到周三的上午11点整重启apache。

  强调:周和日尽量不要同时用,否则可能达不到想要的效果。

日志存放位置及查看结果:

1
2
3
4
5
6
7
8
[root@w /] # ll /var/log/cron*
-rw-------. 1 root root 34683 May  5 16:02  /var/log/cron
-rw-------. 1 root root 40839 Apr 24 03:31  /var/log/cron-20160424
-rw-------. 1 root root 50227 May  1 03:37  /var/log/cron-20160501
[root@w /] # tail -f /var/log/cron
May  5 15:01:01 localhost run-parts( /etc/cron .hourly)[16907]: finished 0anacron
May  5 15:30:27 localhost  crontab [16947]: (root) BEGIN EDIT (root)
May  5 15:31:28 localhost  crontab [16947]: (root) END EDIT (root)

      本文转自cix123  51CTO博客,原文链接:http://blog.51cto.com/zhaodongwei/1770349,如需转载请自行联系原作者



相关文章
|
2月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
295 146
|
3月前
|
缓存 安全 Linux
六、Linux核心服务与包管理
在没有网络的情况下,使用系统安装光盘是获取RPM包的常用方法。场景二:配置本地文件镜像源 (使用系统安装光盘/ISO)(检查RPM包的GPG签名以保证安全) 或。YUM/DNF包管理工具 (yum/dnf)(此处可以放置您为本主题制作的思维导图)处理依赖问题的危险选项 (应极力避免)(覆盖文件、替换已安装包)。(list) 则是列出文件。(query file) 是。(假设系统安装光盘已挂载到。信息 (verbose)。(upgrade) 选项。(all) 已安装的包。(package) 选项
370 11
|
8月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
692 25
|
9月前
|
Linux iOS开发 MacOS
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
272 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
|
11月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
799 19
|
11月前
|
监控 Linux
Linux systemd 服务启动失败Main process exited, code=exited, status=203/EXEC
通过以上步骤,可以有效解决 systemd 服务启动失败并报错 `Main process exited, code=exited, status=203/EXEC` 的问题。关键在于仔细检查单元文件配置、验证可执行文件的有效性,并通过日志分析具体错误原因。确保可执行文件路径正确、文件具有执行权限,并且可以独立运行,将有助于快速定位和解决问题。
4880 7
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
Linux
Linux定时任务:详解crontab与crond
Linux定时任务:详解crontab与crond
499 0
|
监控 测试技术 Linux