之所以发布这篇文章,在重新审查已发布的博文时发现以前发布的【mysql的安全措施了解下】的定时器中描述不全,存在数据备份失败问题,这里补充下解决方案,带来的失误,深感抱歉,具体现象表现为:
shell脚本手动执行没问题,crontab定时执行失败
复制
问题描述:
Shell脚本手动执行可以正常运行,并得到正确结果;使用Crontab定时调度的时候,Shell脚本执行出来的结果数据量为0。
原因:
Linux中用crontab执行定时任务不会缺省的从用户profile文件中读取环境变量参数,所以经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。这是因为用户登录Linux操作系统的时候,”/etc/profile”, “~/.bash_profile”等配置文件会被自动执行,而crontab定时调度的时候可能不会执行配置文件。
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"备份结束"
复制
定时任务执行
crontab -e
复制
00 02 * * * /bin/sh test/mysql_dump.sh
复制
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (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
复制
文章转载自IT学习道场,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
991次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
583次阅读
2025-04-25 15:30:58
墨天轮个人数说知识点合集
JiekeXu
456次阅读
2025-04-01 15:56:03
MySQL数据库当前和历史事务分析
听见风的声音
437次阅读
2025-04-01 08:47:17
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
376次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
364次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
337次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
312次阅读
2025-04-07 12:14:29
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
211次阅读
2025-04-15 15:27:53
[MYSQL] 服务器出现大量的TIME_WAIT, 每天凌晨就清零了
大大刺猬
186次阅读
2025-04-01 16:20:44