Linux 用于进行数据库备份的Shell脚本只能在提示符下工作
我有一个shell脚本,它可以在命令提示符下正常工作,但在我的cron作业中,它抛出了Linux 用于进行数据库备份的Shell脚本只能在提示符下工作,linux,shell,ubuntu-14.04,Linux,Shell,Ubuntu 14.04,我有一个shell脚本,它可以在命令提示符下正常工作,但在我的cron作业中,它抛出了意外运算符 BACKUP=/var/www/backups/mysql NOW=$(date +"%Y%m%d-%H%M") MUSER="root" MPASS="secr3T" MHOST="localhost" MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" GZIP="$(which gzip)" find $BACKUP/* -mtime
意外运算符
BACKUP=/var/www/backups/mysql
NOW=$(date +"%Y%m%d-%H%M")
MUSER="root"
MPASS="secr3T"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
find $BACKUP/* -mtime +15 -exec rm {} \;
DBS="$($MYSQL -h $MHOST -u $MUSER -p$MPASS -Bse 'show databases')"
for db in $DBS
do
if [ "$db" == "myDBase" ]; then
if [ "$db" != "performance_schema" ]; then
FILE=$BACKUP/mysql_backup_$db.$NOW.tar.gz
$MYSQLDUMP -h $MHOST -u $MUSER -p$MPASS $db | $GZIP -9 > $FILE
echo $db
fi
fi
done
我正在使用crontab20 0***var/www/backups/backup.site.sh
我得到的错误是:
/var/www/backups/backup.mysql.sh: 20: [: information_schema: unexpected operator
/var/www/backups/backup.mysql.sh: 20: [: mysql: unexpected operator
/var/www/backups/backup.mysql.sh: 20: [: olb: unexpected operator
/var/www/backups/backup.mysql.sh: 20: [: performance_schema: unexpected operator
我正在Ubuntu 14.04上运行最新版本的mySQL。有人知道为什么吗?如果不指定shell,默认情况下会得到/bin/sh(在Ubuntu 14.04上测试)。sh内置的
[
不支持=
运算符,因此sh不知道如何在第20行比较$db
和myDBase
您应该始终以“#!”行开始脚本以指定shell。要获得bash,第一行应该是
#!/bin/bash
只是意外错误
?crontab的确切行是什么?我猜您应该使用绝对路径,使用相对路径和/或假设。bashrc在cron作业中初始化(不是)。你的脚本是以#!
行开始的吗?我模糊地记得Ubuntu默认使用/bin/dash而不是/bin/bash来处理cron作业。如果[$db==“myDBase”];那么如果[$db”!=“performance\u schema”],那么的目的是什么
?您尝试两次匹配$db
。始终以正确的#!
行开始脚本。