Я использую инструменты 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
Я бы начал с перехода к другому файлу.