Shell 用于制作数据库备份的脚本只能在提示符下运行
Shell script for making database backups works only from prompt
我有一个 shell 脚本,它在命令提示符下运行良好,但在我的 cron 作业中它抛出 unexpected operator
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
我正在使用 crontab 访问脚本 20 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
我是 运行 mySQL 的最新版本 Ubuntu 14.04。有人知道为什么吗?
如果不指定您的 shell,您将默认获得 /bin/sh(在 Ubuntu 14.04 上测试)。 sh 内置的 [
不支持 ==
运算符,因此 sh 不知道如何在第 20 行比较 $db
和 myDBase
。
您应该始终以“#!”开始您的脚本。行以指定 shell。要得到 bash,第一行应该是 #!/bin/bash
.
我有一个 shell 脚本,它在命令提示符下运行良好,但在我的 cron 作业中它抛出 unexpected operator
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
我正在使用 crontab 访问脚本 20 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
我是 运行 mySQL 的最新版本 Ubuntu 14.04。有人知道为什么吗?
如果不指定您的 shell,您将默认获得 /bin/sh(在 Ubuntu 14.04 上测试)。 sh 内置的 [
不支持 ==
运算符,因此 sh 不知道如何在第 20 行比较 $db
和 myDBase
。
您应该始终以“#!”开始您的脚本。行以指定 shell。要得到 bash,第一行应该是 #!/bin/bash
.