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

Создание файла журнала внутри сценария работает при запуске вручную, но не при запуске через cron

Я использую инструменты Percona Xtrabackup для резервного копирования базы данных каждую ночь. Я написал сценарий-оболочку, чтобы хранить необходимое количество резервных копий, записывать вывод в файл журнала и отправлять файл журнала по электронной почте, если резервная копия умирает. Когда я вручную запускаю сценарий от имени пользователя root, файл журнала создается должным образом. Однако, как только я помещаю его в cron, создается файл журнала, но контент не создается. Вот соответствующая часть сценария (дайте мне знать, если я должен опубликовать все это.

DATE=`date +%F-%H%M`
LOC=/var/mysqlbackups/dbBackup-$DATE
LOGLOC="$LOC.log"
/usr/bin/innobackupex --user=$SQLUSER --password=$SQLPASSWORD --no-timestamp $LOC &>>$LOGLOC
if [ $? -ne 0 ]
then
  CONTENT="Backup Failed. Log information below.\n\n--------------------------------------------------------\n$CONTENT"
  CONTENT+=`cat $LOGLOC`
  echo -e "$CONTENT" | mail -s "Backup on DB3 failed" me@my.address
  exit 1
fi

Вот запись crontab в crontab root:

5 1 * * * /usr/local/sbin/dbBackup.sh

И полученные каталоги / файлы. Не то чтобы 28 января я запускал его вручную, затем 29 января он запускался cron:

drwxr-xr-x 5 root root  4096 Jan 28 10:18 dbBackup-2015-01-28-1010
-rw-r--r-- 1 root root 21441 Jan 28 10:18 dbBackup-2015-01-28-1010.log
drwxr-xr-x 5 root root  4096 Jan 29 01:14 dbBackup-2015-01-29-0105
-rw-r--r-- 1 root root     0 Jan 29 01:05 dbBackup-2015-01-29-0105.log

Я спросил в Google, но мне так и не удалось определить проблему. Любая помощь будет оценена.

Оказывается, использование перенаправления ввода-вывода, которое поддерживает только bash, нарушало работу сценария при его запуске в cron. Я перешел на старый синтаксис 2> & 1, и проблема решена.

Я вижу здесь две возможности. Во-первых, я настоятельно рекомендую использовать полные пути для всех команд в заданиях cron - например, /usr/bin/cat вместо того cat. Во-вторых, ваша оболочка может быть более строгой в среде cron, где строка += синтаксис не работает. Попытайтесь как-нибудь обойти это - я не уверен, что это из головы, но catЯ бы начал с перехода к другому файлу.