MySqldump 成功或失败测试

MySqldump 成功或失败测试

我正在使用 mysqldump 备份我的 mysql 数据库,并将其放在 cron 作业下。我想测试它的成功或失败,并希望它在 cron 作业电子邮件中回显成功或失败消息,但失败了?请帮帮我...

要传递什么命令?我这样做了,但失败了:

在我的 php 备份脚本中我包含了:

$testvar = '
        if [ "$?" -eq 0 ] then
    echo "Success"
    else
    echo "Mysqldump encountered a problem look in database.err for information"
    fi
        ';

exec($testvar);

我的服务器说:文件意外结束

答案1

您提到,在此之前您还有其他方法也使用了exec...,因此您的逻辑是有缺陷的。每次使用 执行命令时exec,您都在一个全新的空白环境中工作,并且上一个会话的数据不再可用;因此$?不会有您要查找的值。您需要停止尝试在 PHP 中编写 bash 脚本。

例如,在您的一条评论中您提到了以下内容:

我这样做了:$Backup = “mysqldump ..........”; exec($Backup); $testvar ='.............'; exec($testvar); $createzip ='..........'; exec($createzip);

当您尝试将 bash 命令作为变量执行时……您应该只执行 PHP 之外的必要命令。

而不是像

$testvar = '
    /usr/bin/mysqldump -u DBuser -pDBpassword database >database.sql 2>database.err
    if [ "$?" -eq 0 ]
    then
    echo "Success"
    else
    echo "Mysqldump encountered a problem look in database.err for information"
    fi
        ';

$MysqlDumpMsg=exec($testvar);
echo $MysqlDumpMsg;

你应该做更多这样的事:

exec("mysqldump .......... 2>database.err",$MysqlDumpMsg,$MysqlDumpCode);
if ($MysqlDumpCode = 0) {
  echo "Success";
} else {
  echo "Mysqldump encountered a problem look in database.err for information";
}

或者其他任何你需要的东西。如果你在某个地方有一些压缩命令...那么按照几个步骤来做...

exec("mysqldump .......... >database.sql 2>database.err",$MysqlDumpMsg,$MysqlDumpCode);
if ($MysqlDumpCode = 0) {
  echo "Successfully dumped database.";
  exec("gzip database.sql", $ZipMsg, $ZipReturnCode)
  if ($ZipReturnCode = 0) {
    echo "Successfully zip'd database!";
  } else {
    echo "Failed to compress the database."
  }
} else {
  echo "Mysqldump encountered a problem look in database.err for information";
}

答案2

你的“if”语句有一个拼写错误......

$testvar = '
    if [ "$?" -eq 0 ]; then
      echo "Success"
    else
      echo "Mysqldump encountered a problem look in database.err for information"
    fi
    ';

exec($testvar);

分号很重要 :D

答案3

这里发生了几件事

  • 您似乎没有运行 mysqldump 命令。
  • $?是最后一个命令的退出状态,您在测试之前没有命令,所以它可能无效。
  • shell 脚本的输出将返回给 exec 命令。你正在忽略它。
  • 正如@TheCompWiz 指出的那样,你错过了一个重要的;

尝试这样的事情

$testvar = '
    /usr/bin/mysqldump -u DBuser -pDBpassword database >database.sql 2>database.err
    if [ "$?" -eq 0 ]
    then
        /usr/bin/zip database.zip database.sql >/dev/null 2>>database.err
        if [ "$?" -eq 0 ]
        then
             echo "Succcess"
        else
             echo "Mysqldump succeeded but zip failed see database.err for details"
        fi
    else
    echo "Mysqldump encountered a problem look in database.err for information"
    fi
        ';

$MysqlDumpMsg=exec($testvar);
echo $MysqlDumpMsg;

这将捕获 shell 脚本的输出并将其输出,以便 cron 作业将其邮寄给您。

相关内容