我是linux用户的新手
我试着运行crontab来备份我的数据库与流浪用户。
* * * * * /usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz >/dev/null 2>&1当crontab运行时,文件夹中没有备份文件(我的备份/all有权限方案755)。
这是来自/var/log/syslog的错误
Aug 16 11:55:01 precise64 CRON[2213]: (vagrant) CMD (/usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz >/dev/null 2>&1)
Aug 16 11:55:01 precise64 CRON[2212]: (CRON) info (No MTA installed, discarding output)所以我觉得
>/dev/null 2>&1禁用crontab发送电子邮件,为什么它出错?发布于 2014-08-16 18:20:16
当然,错误在于您没有实现并激活一个mailer (sendmail、postfix等)。
尽管如此,您的另一个问题是,>/dev/null 2>&1只对最后一个命令(在本例中为gzip )应用/关联。因此,您的mysqldump必须有某种类型的输出到STDERR。
我认为你想做的正确方法是:
* * * * * (command | command ) >/dev/null 2>&1发布于 2016-05-21 03:30:48
你可以说:
MAILTO=""在你的crontab文件的开始,这将阻止它试图发送电子邮件。
发布于 2014-08-16 21:12:33
如果运行crontab命令的用户是vagrant,并且输出被写入的目录为root所拥有,并且具有755权限,则不能将其写入。
sudo chown vagrant /var/backup/all
可能会解决这个问题。
要检查这是否是问题所在,请尝试将其写入/tmp中的文件。
但是还有另一个问题:类似于
mysqldump mydb | gzip > database.sql.gz >/dev/null 2>&1
将数据库转储写入database.sql.gz和/dev/null。
2>&1将错误消息复制到standart输出,这意味着它还将错误消息写入database.sql.gz。它只在压缩数据之间写入错误信息文本,这样压缩的文件就会被破坏。注意,当测试时,它可能工作得很好--因为只有当某些东西被写入标准错误流时,问题才会发生。到stderr的输出可能只是一个警告,而其他的一切都正常工作。
我假设您打算将压缩的数据库转储写入sql.gz文件,将错误写入/dev/null文件。为此,只需将输出流分开,不要将错误流复制到输出流。然后把它们指向这样的文件:
mysqldump mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz 2>/dev/null错误消息“(未安装MTA,丢弃输出)”是cron,告诉您它无法向您发送错误输出。这最终不会成为问题,因为您将错误重定向到/dev/null无论如何,将没有什么可发送的。但我怀疑,目前有错误信息要发送,这应该可以证实我的上述发现。
https://unix.stackexchange.com/questions/150546
复制相似问题