mysql 任务计划 /etc/cron.d_计划任务、周期任务、cron

本文介绍了Linux系统中的两种定时任务工具——at和cron。at命令用于一次性计划任务,而cron则用于周期性任务。在使用at时,可以通过atq查看任务队列,atrm删除任务。cron服务需要保持运行状态,通过crontab命令提交任务,并使用特定的配置文件格式。cron任务的时间表示法包括星号(*)、逗号(,)、破折号(-)和斜杠(/)。文章还提供了一些cron任务的例子,并讨论了如何处理cron任务中遇到的问题,如时间表示法中的百分号转义。" 111964901,10548178,CentOS 6.X 使用 RPM 包快速升级 GLIBC,"['CentOS', '虚拟机', 'glibc升级', 'RPM']
摘要由CSDN通过智能技术生成

1 概论

未来的某时间点执行一次某任务:at, batch

周期性运行某任务:crontab

执行结果:会通过邮件发送给用户

查看邮箱服务是否开启:(25端口)

$ netstat -tnlp

$ ss -tnl

2 本地电子邮件服务:

2.1 mail安装:

mailx - send and receive Internet mail

安装邮箱服务

yum install mailx

MUA:Mail User Agent, 用户收发邮件的工具程序;

mailx [-s 'SUBJECT'] username[@hostname]

标题 用户

2.2 邮件正文的生成

2.2.1 交互式输入;

点号(.)单独成行可以表示正文结束;Ctrl+d提交亦可;

发邮件

[root@NUC-1 ~]# mail -s 'hello hdfs' hdfs

How are you these days?

.

EOT

[root@NUC-1 ~]#

收邮件

mail

# #输入数字查看对应第几封邮件

q #q退出

2.2.2 通过输入重定向;

mail -s 'hello hdfs' hdfs < file.txt(正文内容)

2.2.3 通过管道;

cat file.txt | mail -s 'hello hdfs' hdfs

3 at命令

执行一次计划任务,对应服务atd

命令:

at [OPTION]... TIME

TIME格式:

HH:MM [YYYY-mm-dd]

noon,midnight, teatime中午,晚上,喝茶时间(下午四点)

tomorrow明天

now+#

UNIT:minutes, hours, days, OR weeks

at的作业有队列,用单个字母表示,默认都使用a队列;

3.1 常用选项:

-l:查看作业队列,相当于atq

-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;

at -f file now+5min

-d:删除指定的作业,相当于atrm;

-c:查看指定作业的具体内容;

-q QUEUE:指明队列;

3.2 注意

作业执行结果是以邮件发送给提交作业的用户;

[root@KVM ~]# at 10:31

at> echo qq > /root/test.log

at> echo aa >> /root/test.log

at>

job 4 at 2017-08-25 10:31

[root@KVM ~]# at -l

4 2017-08-25 10:31 a root

[root@KVM ~]# ll

总用量 44

-rw-------. 1 root root 1223 5月 18 15:10 anaconda-ks.cfg

-rw-r--r--. 1 root root 25166 5月 18 15:10 install.log

-rw-r--r--. 1 root root 7992 5月 18 15:09 install.log.syslog

[root@KVM ~]# at -l

4 2017-08-25 10:31 a root

[root@KVM ~]# at -l

[root@KVM ~]# ll

总用量 48

-rw-------. 1 root root 1223 5月 18 15:10 anaconda-ks.cfg

-rw-r--r--. 1 root root 25166 5月 18 15:10 install.log

-rw-r--r--. 1 root root 7992 5月 18 15:09 install.log.syslog

-rw-r--r-- 1 root root 6 8月 25 10:31 test.log

[root@KVM ~]# cat test.log

qq

aa

[root@KVM ~]#

4 batch命令:

batch会让系统自行选择在系统资源较空闲的时间去执行指定的任务;

5 周期性任务计划:cron

5.1 服务程序:

cronie:主程序包,提供了crond守护进程及相关辅助工具;

5.2 确保crond守护进程(daemon)处于运行状态:

Ubuntu 16.04:

$ systemctl status cron

CentOS 7:

$ systemctl status crond.service

Active: active (running) ... ...

CentOS 6:

$ service crond status

... is running.

5.3 提交任务

向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令;

cron任务分为两类:

系统cron任务:主要用于实现系统自身的维护;

手动编辑:/etc/crontab文件

用户cron任务:

命令:crontab命令

5.3.1 系统cron的配置格式:/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

注意:

(1) 每一行定义一个周期性任务,共7个字段;

* * * * * : 定义周期性时间

user-name : 运行任务的用户身份

command to be executed:任务命令

(2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

(3) 执行结果邮件发送给MAILTO指定的用户

5.3.2 用户cron的配置格式:/var/spool/cron/USERNAME

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

# | | | | |

# * * * * * command to be executed

注意:

(1) 每行定义一个cron任务,共6个字段;

(2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

(3) 邮件发送给当前用户;

5.4 时间表示法:

(1) 特定值;

给定时间点有效取值范围内的值;

注意:day of week和day of month一般不同时使用;日月不和星期一起使用;

(2) *

给定时间点上有效取值范围内的所有值;表“每..”

(3) 离散取值:,

在时间点上使用逗号分隔的多个值;

#,#,#

(4) 连续取值:-

在时间点上使用-连接开头和结束

#-#

(5) 在指定时间点上,定义步长:

/#:#即步长;例:*/#

注意:

(1) 指定的时间点不能被步长整除时,其意义将不复存在;

(2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;

定义成每分钟任务:而后利用脚本实现在每分钟之内,循环执行多次;

5.5 示例:

(1) 3 * * * *:每小时执行一次;每小时的第3分钟;

(2) 3 4 * * 5:每周执行一次;每周5的4点3分;

(3) 5 6 7 * *:每月执行一次;每月的7号的6点5分;

(4) 7 8 9 10 *:每年执行一次;每年的10月9号8点7分;

(5) 9 8 * * 3,7:每周三和周日;

(6) 0 8,20 * * 3,7:

(7) 0 9-18 * * 1-5:

(8) */5 * * * *:每5分钟执行一次某任务;

(9) */7

5.6 crontab命令:

crontab [-u user] [-l | -r | -e] [-i]

-e:编辑任务;

-l:列出所有任务;

-r:移除所有任务;即删除/var/spool/cron/USERNAME文件;

-i:在使用-r选项移除所有任务时提示用户确认;

-u user:root用户可为指定用户管理cron任务;

crontab -u USERNAME -e

注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件:

(1) COMMAND > /dev/null

(2) COMMAND &> /dev/null

注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可;

a

思考:某任务在指定的时间因关机未能执行,下次开机会不会自动执行?

不会!.

如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用 anacron实现;

6 练习:

1、每12小时备份一次/etc目录至/backups目录中,保存文件 名称格式为“etc-yyyy-mm-dd-hh.tar.xz”

2、每周2、4、7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”;

3、每两小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中;

7 问题

有时候crontab -e添加的任务无法执行,用crontab -l查看有如下提示:

$ crontab -l

# DO NOT EDIT THIS FILE - edit the master and reinstall. # 不要编辑这个文件 - 编辑主文件并重新安装。

# (/tmp/crontab.XXXXhO46kV installed on Tue Jan 2 16:52:05 2018)

# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)

*/5 * * * * /home/huangyunfei/TRAS/initKDC.sh > /dev/null # 原先定时任务里的一个任务

解决办法1:

查找当前crontab所执行的主文件:

$ ll /tmp/crontab.*

-rw-r--r-- 1 huangyunfei huangyunfei 59 Dec 20 15:52 /tmp/crontab.XXXXIivAkb

-rw------- 1 huangyunfei huangyunfei 107 Dec 20 15:36 /tmp/crontab.XXXXruRRNB

找到当前crontab所执行的主文件,然后编辑这个文件:

$ vim /tmp/crontab.XXXXruRRNB

30 0 * * * /home/huangyunfei/TRAS/KL_ENG_Day/restart.sh > /dev/null

1 5 * * * /home/huangyunfei/TRAS/KL_ENG/restart.sh > /dev/null

*/5 * * * * /home/huangyunfei/TRAS/initKDC.sh > /dev/null

然后让crontab重新加载/tmp/crontab.XXXXruRRNB文件里面的内容:

crontab /tmp/crontab.XXXXruRRNB

解决办法2:(测试过)

编辑crontab -l所提到的文件:

$ vim /tmp/crontab.XXXXhO46kV

30 0 * * * /home/huangyunfei/TRAS/KL_ENG_Day/restart.sh > /dev/null

1 5 * * * /home/huangyunfei/TRAS/KL_ENG/restart.sh > /dev/null

*/5 * * * * /home/huangyunfei/TRAS/initKDC.sh > /dev/null # 把crontab -l 原先的定时任务也加进来;

然后让crontab指定执行/tmp/crontab.XXXXhO46kV文件里面的内容:

crontab /tmp/crontab.XXXXhO46kV

8 常见错误

计划任务命令行带“%”,需要在“%”前加转义符“\”

netc@gpu:/data/scripts$ crontab -l

# Edit this file to introduce tasks to be run by cron.

#

# Each task to run has to be defined through a single line

# indicating with different fields when the task will be run

# and what command to run for the task

#

# To define the time you can provide concrete values for

# minute (m), hour (h), day of month (dom), month (mon),

# and day of week (dow) or use '*' in these fields (for 'any').#

# Notice that tasks will be started based on the cron's system

# daemon's notion of time and timezones.

#

# Output of the crontab jobs (including errors) is sent through

# email to the user the crontab file belongs to (unless redirected).

#

# For example, you can run a backup of all your user accounts

# at 5 a.m every week with:

# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

#

# For more information see the manual pages of crontab(5) and cron(8)

#

# m h dom mon dow command

* * * * * /bin/echo $(date +"%F_%T") >> /data/scripts/test.csv

netc@gpu:/data/scripts$

查看cron日志时报错:

CentOS的logs日志:/var/log/cron

Ubuntu的logs日志:/var/log/syslog

Nov 9 14:50:01 gpu CRON[7199]: (netc) CMD (/bin/echo $(date +)

解决方法

netc@gpu:/data/scripts$ crontab -l

... ...

* * * * * /bin/echo $(date +"\%F_\%T") >> /data/scripts/test.csv

netc@gpu:/data/scripts$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值