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
posted @   小满人生  阅读(350)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示