【发布时间】:2023-03-09 17:43:01
【问题描述】:
我这几天一直在努力解决这个问题。谷歌有很多答案,但似乎没有一个能解决这个问题。我希望其他人遇到过这个问题并且知道如何解决它。
所以问题: 我想使用 Cron 删除超过 3 天的文件。
我的 Crontab:
# m h dom mon dow command
SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin
*/1 * * * * /root/insert.sh
0 0 * * * /root/backup.sh
*/1 * * * * find /root/backups -mtime +3 -exec /bin/rm {} \;
有了这个 Crontab /root/backup.sh 每晚午夜运行,这很有效。 /root/insert.sh(运行 php 脚本将一些数据移动到另一个文件夹)也每分钟工作一次。
我去了 /root/backups 并手动输入了 find /root/backups -mtime +15 -exec rm {} \; ,这很有效。它删除了所有超过 15 天的文件。
确认 cron 正在运行这行代码。我跑了tail -f /var/log/syslog | grep CRON(我运行的是ubuntu server 13.04)
Jul 24 07:47:01 myServer CRON[13934]: (root) CMD (find /root/backups -mtime +3 -exec rm {} \;)
Jul 24 07:48:01 myServer CRON[13937]: (root) CMD (/root/insert.sh)
Jul 24 07:48:01 myServer CRON[13938]: (root) CMD (find /root/backups -mtime +3 -exec rm {} \;)
Jul 24 07:49:01 myServer CRON[13954]: (root) CMD (/root/insert.sh)
Jul 24 07:49:01 myServer CRON[13955]: (root) CMD (find /root/backups -mtime +3 -exec /bin/rm {} \;)
所以你可以看到它正在运行。我已经尝试在我的 crontab 中放置一个 PATH 。我尝试使用/bin/rm 而不是rm。有人建议确保 crontab 的末尾有一个 CR。确实如此。
即使它是 root 的 cron,我也做了 chmod a+rwx backups,所以任何人都可以修改这个文件夹。那里仍然没有运气。
我已经在我的 crontab 中尝试了 rm -fr /root/backups 和 /bin/rm -fr /root/backups,但没有奏效。如果我执行/bin/rm -fr /root/backups >> /root/logmeplease.log 2>&1 并且没有任何记录。
最后,我尝试将其放入 shell 脚本中。
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
find /root/backups -mtime +5 -exec /bin/rm {} \;
同样,文件底部有一个 CR。该脚本通过手动运行来工作,但 cron 不会执行它。我还尝试了顶部的#!/bin/bash -l 和#!/bin/bash -x。
关于为什么我的 root 的 cron 不会删除任何文件,我是否缺少一些非常简单的东西?系统日志显示它正在运行脚本或命令?
感谢您对此的任何帮助!
【问题讨论】:
-
当您使用
bash -x时,您会收到包含脚本副本的电子邮件吗? -
你试过
/usr/bin/find而不是find吗? -
我认为这是因为 cron 使用的是 sh,而不是 bash。将第一行
SHELL=/bin/sh更改为SHELL=/bin/bash。这有帮助吗? -
@jsp 做到了!谢谢! (另外我不得不将 PATH 移到下一行。)
-
使用
find ... -exec rm {} +通过一个rm命令删除多个文件。或者更确切地说使用find ... -delete避免调用外部函数。