На этот вопрос уже есть ответ здесь:
РЕДАКТИРОВАТЬ: Мой сценарий находится в папке $ HOME. Это и есть причина проблемы. Подробности в конце вопроса. В любом случае, это не повторяющийся вопрос!
У меня есть довольно тривиальный сценарий, удаляющий некоторые файлы журналов. Отлично работает из командной строки. Однако, если я устанавливаю его на crontab, время от времени я получаю
/ bin / sh: 1: $ MyScript. sh: not found
Я подумал, что это может быть связано с конфигурацией crontab, поэтому я установил его в crontab специально для моего пользователя через
sudo vi /etc/crontab
К сожалению, я все еще периодически получаю ту же ошибку. Ниже мой сценарий .
#!/bin/sh
NOW=$(date +"%m-%d-%Y-%T")
echo "$NOW Starting deleting of log files"
find /$PATH_TO_DIR/logs/* -mtime +30 -type f -delete
if [ $? -eq 0 ]
then
echo "$NOW Successfully deleted files"
else
echo "$NOW Could not delete files"
fi
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Проблема заключалась в том, что моя домашняя папка была зашифрована. Вот почему она периодически работала, только когда я был авторизован в терминале. (Затем домашняя папка расшифровывается, и мой скрипт обнаруживается). Поэтому я переместил свой сценарий в другое место, и он начал работать.
Есть несколько проблем:
crontabs (будь то crontab -e
или файлы в /etc/cron.d
указаны следующим образом:
17 * * * * root /usr/local/bin/script.sh
Этот пример запускается на 17-й минуте каждого часа с правами root.
Однако вы можете поместить нормальные сценарии в /etc/cron.daily/
(или еженедельно, ежемесячно, ежечасно) . Примечание: не помещайте .
в имя файла, тогда оно будет пропущено.
Ваш скрипт также ссылается на неопределенные переменные. Это приведет к пути / logs / *
, потому что $ PATH_TO_DIR
оценивается как пустой. Вы можете исправить это, запустив set -u
где-нибудь в начале вашего скрипта (отказ от ответственности: я не знаю, как Оболочки bash справляются с этим).
Я также думаю, что нам не хватает информации, потому что я не вижу никаких ссылок на $ MyScript