linux下sh脚本可以执行,但是放到crontab中执行无信息(crontab PATH信息与当前用户信息不一致)
创建Mysql备份脚本后,将sh文件加入crontab,命令未执行,日志信息未读取到Mysql库信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash DATE=$( date +%F_%H) HOST=127.0.0.1 USER=root PASS=123123 BACKUP_DIR= /root/tmp/ DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2> /dev/null | grep "mysql" ) echo "今天" $DATE "涉及到的库是:" echo ${DB_LIST} echo '------备份的数据库-----------' echo ${DB_LIST} for DB in ${DB_LIST}; do BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql.gz if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB | gzip > $BACKUP_NAME 2> /dev/null ; then echo "$BACKUP_NAME 备份失败!" fi done echo '------备份成功-----------' find $BACKUP_DIR -mtime +3 - type f | xargs rm -f |
后根据mail信息输出,查看到如下报错信息:
单独sh文件,就可以。
突然想到是不是crontab的path环境变量不包含root下的信息,查看如下:
查看发现,crontab的PATH环境变量确实与root环境变量调用不一致,后修改脚本,在执行前,应用当前用户环境变量,备份完成。
脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash source /root/ .bash_profile DATE=$( date +%F_%H) HOST=127.0.0.1 USER=root PASS=123123 BACKUP_DIR= /root/tmp/ DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2> /dev/null | grep "mysql" ) echo "今天" $DATE "涉及到的库是:" echo ${DB_LIST} echo '------备份的数据库-----------' echo ${DB_LIST} for DB in ${DB_LIST}; do BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql.gz if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB | gzip > $BACKUP_NAME 2> /dev/null ; then echo "$BACKUP_NAME 备份失败!" fi done echo '------备份成功-----------' find $BACKUP_DIR -mtime +3 - type f | xargs rm -f |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结