CRONTAB 作业的管道命令输出删除 5 天以上的文件

CRONTAB 作业的管道命令输出删除 5 天以上的文件

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

相关内容