Cron не работает bash скрипт, который использует дату - PullRequest
1 голос
/ 06 марта 2020

Я тестирую скрипт, который выполняет подпрограммы для ежедневной ротации файлов журналов:

59 23 * * * /home/[username]/work/Rotate.sh

this. sh файл вызывает ряд других скриптов оболочки каждый из них работает аналогично этому:

folderName=$(date +%B)
folderPath="/data/logs/archive/"
currentDate=$(date +%d-%m-%Y)
targetFile="/data/logs/logfile.log"

sudo mkdir $folderPath
sudo mkdir $folderPath$folderName

cp $targetFile $folderPath$folderName/logfile.$currentDate.log

echo "" > $targetFile

Непосредственный вызов Rotate. sh из терминала работает, как и предполагалось (с помощью команды sudo sh work/Rotate.sh), но когда я уменьшил хронирование кронов до более короткого интервалы я не получил никаких результатов вообще. Возможно ли, что какой-то аспект моего скрипта нарушает работу cron? Я что-то пропустил в объявлении строки в crontab -e?

1 Ответ

1 голос
/ 06 марта 2020

Общая причина таких сбоев в том, что ваша среда CRON является минимальной минимальной средой, поддерживаемой системой. Он не знает о дополнительных настройках среды, которые доступны вам через оболочку.

В таких случаях легко обойти эту проблему - найти .profile из своего скрипта оболочки. Помещение нижеприведенной команды в начало вашего файла должно помочь вам решить эту проблему.

source $HOME/.profile

Другим способом сделать это будет исходный код в самом CRONJOB.

59 23 * * * . $HOME/.profile; /home/[username]/work/Rotate.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...