find -delete可以,但是不能用cron


10

请注意我已经阅读了所有类似的问题。cron,路径,env变量等,但是找不到为我特定问题提供解决方案的方法。


我有一个脚本,可以执行一些MySQL转储,然后删除旧的这样的转储:

/usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -delete

以上命令已通过注释的建议从我的原始命令修改而来

但是,当cron运行此脚本时,永远不会删除这些文件。cron用户是root。

调试说明

  • 如果我手动运行该命令所在的脚本,它将按预期删除它们。

  • 如果我以root身份从命令行单独运行上述find命令,它将按预期方式将其删除(并使用-print命令可按预期返回超过5天的文件列表)

  • 我还在root的crontab中添加了一个明确的path语句,但这
    并没有任何改变。

  • Cron不会发送任何错误,并且如果我将find操作通过管道传输到日志文件,
    该文件将显示为空或完全未创建。

  • 我正在使用Ubuntu服务器14.04.03 LTS。


我会避免在路径中使用通配符扩展(例如* .gz)。cron可能会解释为* .gz,而不是扩展所有gz文件。
Archemar

如果不执行任何操作就可以得到什么输出/usr/bin/find /home/bkp/dbdump/*.gz -mtime +5
user9517

@Archemar为什么通配符不会扩展?cron命令在外壳中运行,并且外壳会扩展通配符。
Barmar

cron应该发送带有输出和错误消息的电子邮件。您从这份工作中收到任何这样的电子邮件吗?
Barmar

@Iain它按预期工作。
TommyPeanuts 2015年

Answers:


6

问题是它在运行时crontab尚未$PATH设置。您实际上可以通过将其添加到通过crontab -e以下方式打开的文件的顶部来为其提供路径:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

(或PATH您希望使用的任何内容)。这意味着您可以避免直接从cron指定命令的完整路径。

您的原始命令有多个问题。您基本上是在要求Shell进行通配符扩展,而不是find。其次,您没有提供完整的路径rm;使用/bin/rm/usr/bin/rm,无论它在系统上的什么位置(请参阅参考资料which rm)。

find的第一个参数是“搜索位置”,然后用-<option>s 指定“搜索查询” 。因此,您要运行的命令的正确格式为:

find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -exec rm -f {} \;

要么

find "/home/bkp/dbdump" -name "*.gz" -mtime +5 delete

如果未指定上述PATH定义,请使用:

/usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -exec /bin/rm -f {} \;

要么

/usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 delete

1
它应该已经$PATH设置,但是它将是系统的默认设置。这将包括/usr/bin/bin,因此它应该能够找到该rm命令。
Barmar

因此,我尝试将$ PATH放在crontab中(尽管如其他地方所述,如果未声明,它可能默认为系统路径),并确保所有内容都具有完整路径。我还使用-name“ * .gz”代替了查找路径上的通配符。但是什么也没发生。该命令似乎没有运行,并且没有引发任何错误。
TommyPeanuts 2015年

3

试试这个

find /home/bkp/dbdump -type f -name '*.gz' -mtime +5 -delete

为什么要将stderr重定向到文件?默认情况下,如果有任何输出,它将通过电子邮件发送。
kasperd 2015年

是的,的确默认情况下会向用户的假脱机程序MAIL发送任何电子邮件,并且可以使用邮件进行阅读。
shad0VV 2015年

1
要获得与原始命令相同的效果,您需要添加-maxdepth 1
Niels Keurentjes

0

如果我直接从root的crontab调用find命令,而不是作为脚本的一部分,那么它将起作用。

有问题的脚本使用csh。我相信Ubuntu上root的cron环境将使用/ bin / bash(或/ bin / dash?)。也许这与find命令的运行方式有些冲突。

无论哪种方式,它都解决了主要问题,尽管有些微不足道。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.