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

Почему это задание cron не работает со сценарием оболочки?

Я создал задание cron для ежедневного резервного копирования, чтобы сохранить его в каталоге / backups

Этот каталог резервных копий находится в корне [/] сервера VPS и представляет собой отдельный раздел резервных копий, предоставляемый нашим хостом VPS. IE хранится на другом диске.

Поэтому я создал небольшой сценарий оболочки, чтобы запускать резервные копии и хранить их там.

#!/bin/sh
mysqldump --all-databases | gzip > /backups/dbbackup-`date +%Y-%m-%d`.sql.gz

Это создает резервную копию .gz с прикрепленной датой. Это работает, потому что когда я запускаю его, я получаю то, что хочу.

Но я хочу этого в работе cron. Я отредактировал crontab и установил его запуск в 21:00 каждую ночь.

0 21 * * * /backups/DBBackups.sh

Я проверил журнал cron сегодня утром, и он запустился,

Jun 20 21:00:01 973900 CROND[13279]: (root) CMD (/backups/DBBackups.sh)

Но в каталоге / backups нет файла.

Где я здесь ошибаюсь? Будет ли он где-то выдавать ошибку, которую я не проверяю?

Я все еще новичок в этом деле. Позже я хотел бы экспортировать конкретную базу данных по таблице, потому что с файлом .sql размером 2 ГБ сложно работать, если он мне когда-нибудь понадобится. Кроме того, я, вероятно, скоро достигну какого-то максимального размера файла. Но оставьте это мне. Если кто-то может помочь правильно запустить этот сценарий, это будет очень полезно.

Проблема в вашем скрипте DBbackups.sh. Когда cron запускается, он, вероятно, не имеет информации о пути, конечно, не той, к которой вы привыкли, поскольку она не создается из вашей оболочки входа в систему, поэтому вам нужно указать абсолютные пути. Поэтому DBbackups.sh должен выглядеть примерно так:

#!/bin/sh
BACKUPDIR="/backups"
MYSQLDUMP="/usr/local/mysql/bin/mysqldump"
GZIP="/bin/gzip"
DATE=`date +%Y-%m-%d`

${MYSQLDUMP} --all-databases | ${GZIP} > ${BACKUPDIR}/dbbackup-${DATE}.sql.gz

NB: Как всегда, ваши пути могут отличаться, проверьте свои пути к gzip и mysqldump с помощью

which mysqldump
which gzip