![CRONTAB 作业的管道命令输出删除 5 天以上的文件](https://linux22.com/image/212653/CRONTAB%20%E4%BD%9C%E4%B8%9A%E7%9A%84%E7%AE%A1%E9%81%93%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E5%88%A0%E9%99%A4%205%20%E5%A4%A9%E4%BB%A5%E4%B8%8A%E7%9A%84%E6%96%87%E4%BB%B6%20.png)
我想运行 CRONTAB 作业来删除文件夹中超过 5 天的文件AND 将命令输出传输到文件以防止出现错误。
从命令行运行时,此命令将删除文件:
/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \;
但是,当我将其添加到其中以获取 stdout 和 stderr 管道时,它失败了。
/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \; > /mnt/output/CRONDeleteFiles.txt 2>$1
从命令行,错误是
-bash: $1: 不明确的重定向
从 CRONTAB 电子邮件错误消息中,我收到此错误
/bin/sh: 1: 无法创建: 目录不存在
我怀疑这和我的管道代码有关?
这样做的正确方法是什么?
答案1
stderr 到 stdout 被重定向为2>&1
,而不是2>$1
像您的示例中那样。
答案2
你可以写信给记录器,
find /mnt/SQL_Backups/* -mtime +5 -print -delete 2>&1 | logger -t rmsqlbackups
由于我没有-p user.info
在我的系统上提供优先级或设施(例如),因此它会被写入/var/log/messages
其中。捕获2>&1
的标准错误也标准输出。
或者使用您自己的方法并写入文件,尽管我怀疑您可能需要追加(>>
)而不是输出(>
),在这里我在所有输出前面添加了当前日期/时间,以便您可以看到在以下情况下删除了什么:
( date; find /mnt/SQL_Backups/* -mtime +5 -print -delete; echo ) >> /mnt/output/CRONDeleteFiles.txt 2>&1