我用塔斯纳珀的 make 命令用于管理塔斯纳普像这样的备份:
tarsnapper -c /usr/local/etc/tarsnapper.conf make
它的工作原理应该是这样的,我得到这样的输出
Creating backup mail: mybackupjob-20150610-092951
3 backups are matching
0 of those can be deleted
我现在像这样在 cron 中运行它(cron 似乎在 Ubuntu 15.04 上的 /bin/sh 中运行)
0 2 * * * PATH=$PATH:/usr/local/bin tarsnapper -c /usr/local/etc/tarsnapper.conf make >/dev/null
否则可以工作,但由于某种原因,我仍然通过 cron 在电子邮件中获得输出(标准输出),因此标准输出重定向到 /dev/null 似乎无法按需要工作。
我尝试通过使用重定向运行不带 cron 的命令来进行调试,但在运行时仍然得到输出:
tarsnapper -c /usr/local/etc/tarsnapper.conf make >/dev/null
那么如何正确地将这个 tarsnapper 调用的正常输出(stdout)重定向到 /dev/null ?
我在使用其他命令进行重定向时从未遇到过此类问题>/dev/null
,所以这一定与 tarsnapper 的工作方式有关,对吧?
我知道 tarsnapper 是一个调用 tarsnap 二进制文件的 python 脚本。
我尝试寻找有关重定向标准输出的答案,但找不到任何可以解决我的问题的内容。
答案1
该死,就在我发布问题后,我发现了问题(在尝试寻找答案大约一两个小时之后)。
tarsnapper 似乎只是将其所有正常输出输出到 stderr 而不是 stdout。我认为这是 tarsnapper 中的一个错误。
但要回答我自己的问题,我只需要使用重定向2>/dev/null
(到 rediredt stderr)来摆脱“正常输出”,但我想即使可能存在实际错误,我也不会得到任何输出(我仍然会这样做)如果发生错误,喜欢从 cron 获取我的电子邮件)。
编辑:
作为一个临时的“解决方案”,我最终只是重定向 tarsnapper 的所有输出(stdout 和 stderr),并将其附加到 cron 中的日志文件中:
0 2 * * * PATH=$PATH:/usr/local/bin tarsnapper -c /usr/local/etc/tarsnapper.conf make >>/var/log/tarsnapper-cron.log 2>&1
所以我可以检查/var/log/tarsnapper-cron.log
是否想看看 tarsnapper 是如何工作的,而不是通过 cron 向我的电子邮件发送垃圾邮件。
如果我也能自动获取电子邮件中可能出现的错误,显然会更好,但目前,如果不修改 tarsnapper 本身或制作一个解析 tarsnapper 输出并尝试找出是否存在错误的脚本,这似乎是不可能的错误与否取决于输出文本。