MySqldump成功或失败testing

我正在使用mysqldump采取我的MySQL数据库的备份,并把它放在一个cron作业。 我想testing它的成功或失败,并希望它呼应cron作业电子邮件中的成功或失败消息,但失败? 请帮我…

什么命令通过? 我做到了,但失败了:

在我的PHP备份脚本,我包括:

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

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

你提到你之前有其他的方法也使用exec …因此你的逻辑是有缺陷的。 每次使用exec执行一个命令,你在一个新的空白环境中工作,以前的会话数据不再可用; 和这样的$? 将不会有你正在寻找的价值。 您需要停止尝试在PHP中编写bash脚本。

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

我这样做:$备份=“mysqldump ……….”; EXEC($备份); $ testvar ='………….'; EXEC($的testvar); $ createzip ='……….'; EXEC($ createzip);

当不是试图将bash命令作为一个variables来执行时……你应该只执行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"; } 

您在“if”陈述中有错字

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

分号是重要的:D

几件事情在这里

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

尝试这样的事情

 $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作业将其邮寄给您。