Из-за какой-то ошибки в одном из моих скриптов я вынужден удалять временные файлы каждые 30 минут, пока я не разберусь и не отлажу.
Для этого я написал небольшой сценарий bash, который запускаю каждые 30 минут (tempCleaner).
#!/bin/bash
numberOfFiles=$(find -name php* | wc -l)
echo "$numberOfFiles"
if (("$numberOfFiles" <= "0"))
then
echo "Nothing to delete"
echo "There's nothing to delete, everything is fine $(date)" >> /tmp/scan_log
else
echo "Something to delete"
echo "Oops, there are some files that needs to be deleted $(date)" >> /tmp/scan_log
sudo rm -vrf php* >> /tmp/deleted_files_log
fi
Я протестировал его (./tempCleaner), и теперь он отлично работал, запускал его каждые 30 минут, я использую cron (sudo crontab -e) и написал следующее: (Я знаю время, это просто быстро проверить)
* * * * * nice -19 /tmp/tempCleaner >> /tmp/error_log_cron
что бы я ни пробовал, у меня это не работает. Зачем ? Что я делаю не так ? что мне не хватает?
Некоторая техническая информация. Загрузка сервера часто превышает 1.0 (не уверен, имеет ли это значение для cron или нет) файлы расположены в / tmp, файлы, которые я хочу удалить, относятся к следующей группе www-data: www-data файл bash (tempCleaner) установлен + x и связан с ubuntu: ubuntu
Сценарий работает в каталоге, в котором вы его запускаете, что почти наверняка является чем-то другим в среде cron. Добавить заявление в cd
в соответствующий каталог, прежде чем делать что-либо еще.
Редактировать:
Добавление cd /tmp
должно сработать. Что-то еще может быть процитировать -name
вариант для find
:
#!/bin/bash
cd /tmp
echo $(date) >> /tmp/deleted_files
find -name 'php*' -type f | xargs rm -rvf >> /tmp/deleted_files
И еще одно изменение: может быть, nice
не находится на пути вашей среды cron. Либо вызовите сценарий напрямую (что в любом случае имеет смысл во время отладки), либо добавьте полный путь к nice.
Вероятно, вам следует поместить весь путь перед командами, такими как find и rm.
/ usr / bin / найти
и
/ bin / rm
в моем случае...
Ник
P.S. если вы выполняете sudo внутри скрипта, что произойдет, если он запросит пароль?
Sudo, добавляющий скрипт в crontab, должен отбросить cron в корень, а sudo перед rm не требуется.
То, что сказал @svenW, верно ... но в своей находке вы должны добавить что-то вроде -mmin +10, чтобы убедиться, что вы не удаляете используемый файл, который приведет к тому, что ваш запрос получит 500 или что-то в этом роде для пользователя.