我正在使用 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 作业将其邮寄给您。