2017-01-03 14 views
0

Мне нужна помощь с помощью скрипта bash. Сценарий «backup.sh» выглядит следующим образом:Удалите старые файлы, переходящие по дате, сохраняя определенное количество файлов в Cronjob не работая

rm -f $(ls -t /backups/mongo/ | awk 'NR>14') 
    rsync -pvztr --progress /backups/*........... 

Я хочу, чтобы удалить старые файлы в/резервных копий/Монго/папки, не сохраняя не более 15 файлов. Скрипт отлично работает, если я запускаю ./backup.sh, но если я запустил его как cronjob, удаляемая часть (rm) не будет работать, остатки будут работать.

Может ли кто-нибудь помочь мне выявить проблему?

+1

[Почему * не * синтаксический анализ команды ls?] (Http://unix.stackexchange.com/questions/128985/why-not-parse-ls) – Cyrus

+0

Что ошибка вы получаете? – codeforester

ответ

0

Похоже, вам нужно загрузить профиль bash. Его не загружают по умолчанию, когда вы вызываете скрипт bash из crontab. Просто добавьте

source /etc/profile 

начала вам сценария

0

Сделать ls производят полные пути файлов, которые будут удалены. В противном случае rm может сбой или удаление файлов в неправильном каталоге, если текущий каталог не является /backups/mongo/.
Используется синтаксис типа bash. Используйте sheebang, чтобы заставить вас использовать скрипт bash.

#!/bin/bash 
rm -f $(ls -t /backups/mongo/* | awk 'NR>14') 
....