Назад | Перейти на главную страницу

Не могу понять, что не так с моим crontab

Из-за какой-то ошибки в одном из моих скриптов я вынужден удалять временные файлы каждые 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 или что-то в этом роде для пользователя.