Я работал над тем, чтобы понять это в течение нескольких дней. У Google есть много ответов, но ни один из них не решает эту проблему. Я надеялся, что у кого-то еще была эта проблема, и он знает, что делать, чтобы исправить это.
Итак, проблема: я хотел бы удалить файлы старше 3 дней с помощью Cron.
Мой Кронтаб:
# 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 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 {} \;)
Таким образом, вы можете видеть, что он работает. Я попытался поместить PATH в свой crontab. Я пытался поставить /bin/rm
вместо rm
. Кто-то предложил убедиться, что в конце crontab есть CR. Оно делает.
Несмотря на то, что это cron root, я сделал chmod a+rwx backups
, так что любой может изменить эту папку. Там все равно не повезло.
Я пробовал rm -fr /root/backups
и /bin/rm -fr /root/backups
в своем crontab, и это не сработало. Если я сделаю /bin/rm -fr /root/backups >> /root/logmeplease.log 2>&1
и ничего не зарегистрируется.
Наконец, я попытался поместить это в сценарий оболочки.
#!/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
вверху.
Есть ли что-то действительно простое, что мне не хватает, почему мой корневой cron не удаляет файлы? А в системном журнале видно, что запущен скрипт или команда?
Спасибо за любую помощь в этом!
bash -x
, вы получаете электронное письмо с расшифровкой сценария? - person Barmar   schedule 24.07.2013/usr/bin/find
вместоfind
? - person uzsolt   schedule 24.07.2013SHELL=/bin/sh
наSHELL=/bin/bash
. Это помогает? - person jsp   schedule 24.07.2013find ... -exec rm {} +
для удаления нескольких файлов одной командойrm
. Или, скорее, используйтеfind ... -delete
, чтобы избежать вызова внешней функции. - person TrueY   schedule 25.07.2013