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']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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$

. mysqldump命令备份数据在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump,首先我们简单了解一下mysqldump命令用法:#MySQLdump常用mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql二. mysqldump常用操作示例1.备份全部数据库的数据和结构mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql2.备份全部数据库的结构(加 -d 参数)mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql3.备份全部数据库的数据(加 -t 参数)mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql4.备份单个数据库的数据和结构(,数据库名mydb)mysqldump -uroot-p123456 mydb > /data/mysqlDump/mydb.sql5. 备份单个数据库的结构mysqldump -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql6. 备份单个数据库的数据mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql7. 备份多个表的数据和结构(数据,结构的单独备份方法与上同)mysqldump -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql8. 一次备份多个数据库mysqldump -uroot -p123456 --databases db1 db2 > /data/mysqlDump/mydb.sql三. 还原 MySQL 备份内容有两种方式还原,第一种是在 MySQL 命令行中,第二种是使用 SHELL 行完成还原1.在系统命令行中,输入如下实现还原:mysql -uroot -p123456 < /data/mysqlDump/mydb.sql2.在登录进入mysql系统中,通过source指令找到对应系统中的文件进行还原:mysql> source /data/mysqlDump/mydb.sql在 Linux中,通常使用BASH脚本对需要执行的内容进行编写,加上定时执行命令crontab实现日志自动化生成。以下代码功能就是针对mysql进行备份,配合crontab,实现备份的内容为近一个月(31天)内的每天的mysql数据库记录。编写BASH维护固定数量备份文件在Linux中,使用vi或者vim编写脚本内容并命名为:mysql_dump_script.sh#!/bin/bash #保存备份个数,备份31天数据number=31#备份保存路径backup_dir=/root/mysqlbackup#日期dd=`date +%Y-%m-%d-%H-%M-%S`#备份工具tool=mysqldump#用户名username=root#密码password=TankB214#将要备份的数据库database_name=edoctor #如果文件夹不存在则创建if [ ! -d $backup_dir ];then         mkdir -p $backup_dir;fi #简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql$tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql #写创建备份日志echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt #找出需要删除的备份delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1` #判断现在的备份数量是否大于$numbercount=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l` if [ $count -gt $number ]then  #删除最早生成的备份,只保留number数量的备份  rm $delfile  #写删除文件日志  echo "delete $delfile" >> $backup_dir/log.txtfi如上代码主要含义如下:1.首先设置各项参数,例如number最多需要备份的数目,备份路径,用户名,密码等。2.执行mysqldump命令保存备份文件,并将操作打印至同目录下的log.txt中标记操作日志。3.定义需要删除的文件:通过ls命令获取第九列,即文件名列,再通过实现定义操作时间最晚的那个需要删除的文件。4.定义备份数量:通过ls命令加上wc -l统计以sql结尾的文件的行数。5.如果文件超出限制大小,就删除最早创建的sql文件使用crontab定期执行备份脚本在 Linux 中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。cron服务cron是一个 Liunx 下 的定时执行工具,可以在无需人工干预的情况下运行作业。service crond start    //启动服务service crond stop     //关闭服务service crond restart  //重启服务service crond reload   //重新载入配置service crond status   //查看服务状态 crontab语法crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行。每个用户都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接创建或者直接修改。该crontab文件是通过crontab命令创建的。在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:minute hour day-of-month month-of-year day-of-week commands 合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)  除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。 -l 在标准输出上显示当前的crontab。 -r 删除当前的crontab文件。 -e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。 创建cron脚本第一步:写cron脚本文件,命名为mysqlRollBack.cron。15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt  表示,每隔15分钟,执行打印一次命令第二步:添加定时任务。执行命令 “crontab crontest.cron”。搞定第三步:"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本注意:这操作是直接替换该用户下的crontab,而不是新增定期执行编写的定时任务脚本(记得先给shell脚本执行权限)0 2 * * * /root/mysql_backup_script.sh随后使用crontab命令定期指令编写的定时脚本crontab mysqlRollback.cron再通过命令检查定时任务是否已创建:附 crontab 的使用示例:1.每天早上6点0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。2.每两个小时0 */2 * * * echo "Have a break now." >> /tmp/test.txt3.晚上11点到早上8点之间每两个小时和早上八点0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt4.每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点0 11 4 * 1-3 command line5.1月1日早上4点0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/6.每小时执行/etc/cron.hourly内的脚本01 * * * * root run-parts /etc/cron.hourly7.每天执行/etc/cron.daily内的脚本02 4 * * * root run-parts /etc/cron.daily8.每星期执行/etc/cron.weekly内的脚本22 4 * * 0 root run-parts /etc/cron.weekly9.每月去执行/etc/cron.monthly内的脚本42 4 1 * * root run-parts /etc/cron.monthly注意: "run-parts" 这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。10.每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。5,15,25,35,45,55 16,17,18 * * * command11.每周一,三,五的下午3:00系统进入维护状态,重新启动系统。00 15 * * 1,3,5 shutdown -r +512.每小时的10分,40分执行用户目录下的innd/bbslin这个指令:10,40 * * * * innd/bbslink13.每小时的1分执行用户目录下的bin/account这个指令:1 * * * * bin/account以下是我的测试每分钟的截图效果,其对应代码如下:* * * * * /root/mysql_backup_script.sh效果截图:其中的log.txt记录备份的操作详细日志:来源:cnblogs.com/letcafe/p/mysqlautodump.html
最新发布
04-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值