linux 计划任务

来源:互联网 发布:阿里云搭建微信公众号 编辑:程序博客网 时间:2024/05/22 04:33
linux 计划任务分为单次计划任务和周期性计划任务,其中单次计划任务用at命令来执行,周期计划任务用crontab 命令来实现。实际工作中一般都用周期性计划任务,所以下面将重点讲解下周期性计划任务crontab。

一 . crontab 格式说明

Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件,格式如下所示:
这里写图片描述

[wang@Centos6.9 ~]$cat /etc/crontab SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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

格式说明:
SHELL变量指定了系统要使用哪个shell,这里是bash
PATH 变量指定了系统执行命令的路径
MAILTO 变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务 执行信息给用户
HOME 变量指定了在执行命令或者脚本时使用的主目录

Minute Hour Day Month Dayofweek user-name command
分钟 小时 天 月 每星期几 用户 命令
每个字段代表的含义如下:
Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek 每周的第几天执行该任务
Command 指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段。
对于不指定的字段,要用“*”来填补其位置。
这里有几个特殊符号的含义:
*“”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字**

    例如: 30 1 *  *  6     copy  /test /test/back/test.bak           指定每个星期6的1:30执行一次复制test 的命令 30  10   10    *   *  wang /wang/delet.sh            指定每月10号的10:30 wang 用户执行delet.sh 的脚本30  10   10    *   0  wang copy test test.bak           ****指定每月10号和每个星期天**的10:30 wang 用户执行复制test命令 (当 day 和 dayofweek 字段重合时候表示两个都执行**)30  3  10,15   *  *  copy xx  每月10号和15号的3:30执行copy命令 25  8-10 *   *   *  每天8-10点的第25分钟*/20   *  *  *  *    每20分钟执行一次 30 20  */5  *  *     每隔5天20:30执行一次

二、crontab 安装包和服务启动

计划任务相关的程序包如下:
1. cronie: 主程序包,提供crond守护进程及相关辅助工具。
crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
2. cronie-anacron: cronie的补充程序,用于监控cronie任
务执行状况,如cronie中的任务在过去该运行的时间点未能正常
运行,则anacron会随后启动一次此任务
3. crontabs:包含CentOS提供系统维护任务

查看crond守护进程运行状态:
**

CentOS 7:  systemctl status crondCentOS 6:  service crond status如: [wang@Centos6.9 ~]$service crond statuscrond (pid  2317) is running...[root@centos7 ~]#systemctl status crond● crond.service - Command Scheduler   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)   **Active**: active (running) since Sun 2017-08-27 22:18:18 HKT; 1s ago Main PID: 46896 (crond)   CGroup: /system.slice/crond.service           └─46896 /usr/sbin/crond -n**想执行周期性计划任务要确保crond 进程是运行状态!**service crond status|stop centos6启动和停止crond 进程命令systemctl start|stop crond centos7启动和停止crond命令

**

**

用户cron任务:

**
crontab命令是给普通用户来创建计划任务的,使用crontab命令定义可以实现每个用户都有专用的cron任务文件。常用选项如下:
crontab [-u user] [-l | -r | -e]
-l: 列出所有任务
-e: 编辑任务
-r: 移除所有任务
-i:同-r一同使用,以交互式模式移除指定任务
-u user: 仅root可运行,指定用户管理cron任务
普通用户通过crontab -e 来创建计划任务,格式就是上面的crontab 格式一样,只是不用写用户名选项,因为就是本用户嘛。
运行结果的标准输出和错误以邮件通知给相关用户,通过
cat /var/log/cron 查看计划任务日志文件。如果不想发送邮件给用户可以在命令后加上 &>/dev/null 就可以了。
对于cron任务来讲, %有特殊用途;如果在命令中要使用%,
则需要转义,将%放置于单引号中,则可不用转义。

原创粉丝点击