Cron输出stdin:不是tty

时间:2017-10-16 19:05:31

标签: php linux cron

我已经配置了一个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

0 个答案:

没有答案