Last Updated on
前言
就像再windows上有计划任务一样,centos7 自然也有计划任务,而且设置更为灵活好用。在centos7 上可以利用系统自带默认运行着的服务crond,通过配置crontab来配置执行计划任务。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
非常简单方便,是centos7上基本必须了解知道的东西,下面我就详细记录介绍cron的使用。
正文
1. 确认服务运行
首先确认服务是运行着的,如果关了请启动
# 启动crond服务
$ systemctl start crond
# 设为开机启动
$ systemctl enable crond
# 查看状态
$ systemctl status crond
2. 配置定时任务
定时任务的配置方法,都是通过编写配置文件进行配置的。但配置文件又分为两类:
- 用户的配置,根据用户进行区分的用户级别的配置文件
- 系统配置,统一的全局配置文件
下面就说明一下这两种配置文件的配置方式。
用户配置
# 编辑用户的定时任务,指定执行的用户
# -u 指定用户,不加默认为当前用户
$ crontab -e -u {user}
# 列出某个用户cron服务的详细内容
$ crontab -l -u {user}
# 删除某个用户的cron服务
$ crontab -r -u {user}
使用命令编辑用户的定时任务,会打开此用户的配置文件,开始是空的文件,然后就是在此文件中配置定时任务,配置完后生成的配置文件目录为: /var/spool/cron/ ,在此目录下就可以看到以用户名命名的配置文件。
之前配置文件中,该如何配置,下面统一详解。
系统配置
除了上面用户配置,还有一个系统的全局配置,配置文件为:/etc/crontab 。此文件可以直接定义定时任务,但前提是有root权限才能修改。
# 编辑系统配置,文件默认内容如下
$ vim /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
------------------------------------------------------------------
3. 配置语法
上面说明了两种配置方式,但两种配置方式都是需要通过定义配置来实现定时任务的,那这配置该如何写呢,其实在系统配置文件中,默认的内容就有提示:
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 # 格式就是最下面一行的这个,意思明显,从头到尾,分别如下: 分钟 小时 天 月 周 用户名 需要执行的命令 * * * * * user-name command to be executed 根据此格式,举例说明,根据举例,自行编写自己的定时任务配置即可。 # 每天,每30分钟执行一次 mycommand命令,这需要此文件具有可执行权限。 */30 * * * * root /usr/local/mycommand.sh # 每天凌晨三点的每一分钟,都执行命令脚本 # PS:这里由于第一个的分钟没有设置,那么就会每天凌晨3点的每分钟都执行一次命令 * 3 * * * root /usr/local/mycommand.sh # 这样就是每天凌晨三点整执行一次命令脚本 00 3 * * * root /usr/local/mycommand.sh # 每天11点到13点之间,每10分钟执行一次命令脚本,这一种用法也很常用 */10 11-13 * * * root /usr/local/mycommand.sh # 每小时的10-30分钟,每分钟执行一次命令脚本,共执行20次 10-30 * * * * root /usr/local/mycommand.sh # 每小时的10,30分钟,分别执行一次命令脚本,共执行2次 10,30 * * * * * root /usr/local/mycommand.sh # 每周一至周五,半夜3点执行一次命令脚本 00 3 * * 1-5 root /usr/local/mycommand.sh # 从1月到6月,每月的10-20号,每天的10点到12点,每30分钟执行一次。 */30 10-12 10-20 1-6 * root /usr/local/mycommand.sh # 每隔一天的凌晨执行一次命令 00 00 */2 * * root /usr/local/mycommand.sh
OK,上面就是配置的语法,但需要特别注意几点:
- cron 的任务计划, 并不会调用用户设置的环境变量,而是只会使用shell的基础环境变量。
- cron 不方便执行语句繁多的任务,常用推荐是写成shell脚本或python脚本进行执行。
- 执行脚本文件时,此文件必须具有可执行权限。
另外,执行的计划任务,日志在 /var/log/cron 中可以查看执行日志,以供分析查看。
结束
OK,到此就记录介绍完了crond服务并利用其实现定时计划任务。这中方式可以运用在小的临时的定时任务安排上,而对于管理大量服务器的情况下,则需要有一个运维平台,此运维平台来集中调度执行你所有的计划任务,当然啦这也是中大型互联网公司所必有的平台,现在这里开个坑,后面在更新python相关文章时,会以运维平台为例,系统的记录介绍实现自己的运维平台。
好啦,有任何问题,欢迎留言。
good,非常详细!