我想运行 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