Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于进行数据库备份的Shell脚本只能在提示符下工作_Linux_Shell_Ubuntu 14.04 - Fatal编程技术网

Linux 用于进行数据库备份的Shell脚本只能在提示符下工作

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

我有一个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 +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

我正在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
。始终以正确的
#!
行开始脚本。