find-delete工作正常,但不与cron

请注意我已经阅读了所有类似的问题。 cron,path,envvariables等,但没有发现任何解决scheme提供我的特定问题。


我有一个脚本,使一些MySQL转储,然后删除旧的像这样:

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

上面的命令已经从我原来的命令修改的意见build议

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

debugging笔记

  • 如果我手动运行出现该命令的脚本,则会按预期删除它们。

  • 如果我以root身份从命令行自己运行上面的find命令,则会按预期方式删除它们(并且使用-print它将返回如预期的早于5天的文件列表)

  • 我也为根的crontab添加了一个显式path声明,但是
    这不会改变任何东西。

  • Cron不会发送错误,如果我将查找操作传送给日志文件,
    这是空的或根本不创造。

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

问题是crontab运行时没有设置$PATH 。 您可以通过将其添加到通过crontab -e打开的文件顶部来提供path:

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

(或者你喜欢使用的任何PATH )。 这意味着你可以避免直接从cron指定命令的完整path。

您的原始命令有多个问题。 你基本上要求shell执行通配符扩展,而不是find 。 其次,你没有提供完整的rmpath; 使用/bin/rm/usr/bin/rm ,无论它位于您的系统上(请参阅which rm )。

查找的第一个参数是“要search的位置”,然后用各个-<option>指定“search查询”。 所以,你想运行的命令的格式是:

 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 

试试这个

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

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

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

无论哪种方式,它解决的主要问题,尽pipe有点不雅。