linux的定时器-备份mysql

peng_hui
发布于 2022-9-7 15:23
浏览
0收藏

作者 | IT学习道场

来源 | IT学习道场(ID:itlearndojo)

之所以发布这篇文章,在重新审查已发布的博文时发现以前发布的【mysql的安全措施了解下】的定时器中描述不全,存在数据备份失败问题,这里补充下解决方案,带来的失误,深感抱歉,具体现象表现为:

shell脚本手动执行没问题,crontab定时执行失败

问题描述:

Shell脚本手动执行可以正常运行,并得到正确结果;使用Crontab定时调度的时候,Shell脚本执行出来的结果数据量为0。

原因:

Linux中用crontab执行定时任务不会缺省的从用户profile文件中读取环境变量参数,所以经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。这是因为用户登录Linux操作系统的时候,”/etc/profile”, “~/.bash_profile”等配置文件会被自动执行,而crontab定时调度的时候可能不会执行配置文件。

解决方案:

Shell脚本缺省的 #!/bin/sh 开头换行后的第一行添加,可以参考 菜鸟教程

source /etc/profile
source ~/.bash_profile

最终mysql的备份脚本mysql_dump.sh内容如下:


#! /bin/bash
source /etc/profile
source ~/.bash_profile
login_user="root"
login_passwd=""
vDate=`date +%Y%m%d`
backup_dir="/home/data/backups/"$vDate"/"
echo$backup_dir
if[ ! -d $backup_dir ];then
       mkdir -p $backup_dir
fi
# 将需要备份的数据放入
db_array=("数据库1名字""数据库2名字" "数据库3名字") #配置要备份的数据库
fordb_name in ${db_array[*]}
do
   mysqldump -u root -p$login_passwd $db_name > $backup_dir$db_name.sql
done
# 删除7天前备份的文件
find backup_dir -atime +7 -name "*.sql"-exec rm -rf {} \
echo"备份结束"

定时任务执行
使用linux的crontab命令定时执行备份数据的脚本

crontab -e

编辑定时任务,按 i 进入编辑模式

这里凌晨二点执行一次定时器规则

00 02 * * * /bin/sh /test/mysql_dump.sh

编辑完保存即可,(夜猫子熬不到半夜两点)

按 【Esc】然后 输入 :wq 保存退出

定时任务的执行最小单位为分钟,详情代表如下:

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

注意要开启你的定时器,定时器常用操作命令如下:

crontab -e  # 创建自己的一个任务调度,此时会进入到vi编辑界面,来编写我们要调度的任务
crontab -l # 列出定时的任务
crontab -r con_name # 删除crontab文件
which ifconfig # 获取命令路径
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
/sbin/service crond status //启动服务
chkconfig –level 35 crond on // 加⼊开机⾃动启动:
----------------------------------------------------------------------------------------------------
service crond start //启动服务 
service crond stop //关闭服务 
service crond restart //重启服务 
service crond reload //重新载入配置
service crond status //查看状态
chkconfig crond on //设置开机自动启动crond服务:
systemctl enable crond.service // 设置开机自动启动crond服务:
chkconfig –list crond //开机级别的crond服务运行情况 ,2、3、4、5级别开机会自动启动crond服务 
chkconfig crond off//取消开机自动启动crond服务:
crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务
crontab -l //列出当前的所有调度任务 
crontab -l -u jp //列出用户jp的所有调度任务
crontab -r //删除所有任务调度工作
每天早上6点 
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
每两个小时 
0 */2 * * * echo "Have a break now." >> /tmp/test.txt  
晚上11点到早上8点之间每两个小时和早上八点 
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
0 11 4 * 1-3 command line
1月1日早上4点 
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/ 
每小时执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
每天执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily 
每星期执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly 
每月去执行/etc/cron.monthly内的脚本 
42 4 1 * * root run-parts /etc/cron.monthly 
每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * * command
每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
00 15 * * 1,3,5 shutdown -r +5
每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
10,40 * * * * innd/bbslink 
每小时的1分执行用户目录下的bin/account这个指令:
1 * * * * bin/account

分类
标签
已于2022-9-7 15:23:34修改
收藏
回复
举报
回复
    相关推荐