我已经配置了一个cronjob来备份mysql数据库并将文件上传到Amazon S3。这是工作:
57 14 * * * . $HOME/.profile; php /root/backup_scripts/mysql-backup/index.php
以下是index.php
:
<?php
require 'vendor/autoload.php';
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'profile' => 'my-bucket',
]);
$file = tmpfile();
$filename = stream_get_meta_data($file)['uri'];
$username = getenv('MYSQL_USERNAME');
$password = getenv('MYSQL_PASSWORD');
shell_exec("mysqldump -u {$username} -p{$password} --events --all-databases --extended-insert=FALSE --complete-insert=TRUE > {$filename}");
$result = $s3->putObject([
'Bucket' => 'my-bucket',
'Key' => 'mysql.backup.' . time(),
'Body' => $file,
]);
fclose($file);
?>
上传工作正常,但我收到来自Cron的电子邮件,其中包含该命令的输出。输出是:
stdin: is not a tty
我已经阅读了一些关于SO的相关问题,并且理解这是由期望以stdin作为终端运行的命令引起的。当cron运行命令时,没有终端,因此输出发生。
但是,我还没有找到解决方法来解决这个问题。有没有办法确保不会出现这种输出?我也不清楚哪个命令实际产生了输出。它是cron命令本身,还是从PHP脚本中执行的mysqldump
?