Настройка CRON еженедельного резервного копирования

Я хочу сделать резервную копию моих папок /var/lib/mysql и /var/www и сохранить их в виде файлов tar.gz на моем смонтированном сетевом файловом сервере (uslons001).

Вот мой bash-файл, расположенный по адресу: /bin/backups/mysqlbackup.sh

#!/bin/bash
mkdir /home/lv_admin/uslons001/`date +%d%m%y`
cd /home/lv_admin/uslons001/`date +%d%m%y`
tar -czf mysql.tar.gz /var/lib/mysql
tar -czf www.tar.gz /var/www

, который прекрасно работает, когда я выполняю его в оболочке cmd, но когда я настраиваю задание cron, оно никогда не запускается, не правильно настроить работу cron. Моя работа cron выглядит следующим образом.

   36 10 * * 5 /bin/backups/mysqlbackup.sh

.. в файле /var/log/cron.log также ничего нет, поэтому ошибки не регистрируются. (даже после включения регистрации cron в файле /etc/syslog.conf

7
задан 4 March 2011 в 19:40

4 ответа

Несколько замечаний:

  • Почему вы вообще используете временные строки в /etc/cron.weekly/ сценариях? Вы должны только поместить исполняемые скрипты туда. Вам не нужно crontab их или что-нибудь еще. Это просто дублирует их работу. Посмотрите на /etc/cron.daily/apt пример того, о чем я говорю. Это простой сценарий.

  • Согласно комментарию гейры, файл не может иметь расширение. Странно, я знаю, поэтому переименуйте его:

    sudo mv /etc/cron.weekly/mysqlbackup{.sh,}
    
  • Вам нужно запустить sudo chmod +x /etc/cron.weekly/mysqlbackup, чтобы сделать его исполняемым. Затем вы можете проверить его, запустив его по этому пути.

  • Если вы оставите его в /etc/cron.weekly/, скрипт будет запускаться от имени root. Ни одна из ваших ~/ ссылок не будет работать. Используйте полные пути. Я бы посоветовал после того, как вы сделаете mkdir, вы cd включите его, и это уменьшит огромные пути в последующих командах. Если вам нужно, чтобы сгенерированные файлы принадлежали вашему пользователю, сделайте ваш скрипт chown для них, когда будет выполнено резервное копирование.

    Я не вижу причин для того, чтобы что-то из этого было рутованным. Вы можете добавить скрипт в свой домашний каталог и просто использовать стандарт crontab -e, чтобы добавить правило и запустить его. Он по-прежнему должен быть исполняемым, и я бы порекомендовал вам использовать полные пути, но он немного упрощает права доступа.

0
ответ дан 4 March 2011 в 19:40

День недели является числовым полем, таким образом, оно перестало работать при попытке проанализировать 'пятницу'. Изменение, что к 5 (воскресенье 0).править: Я вижу, что OP был обновлен для фиксации этого и существуют все еще проблемы, но они обращены в других ответах.

Формат крона хорошо документируется онлайн, таким образом, я обычно заканчиваю тем, что проверил документы прежде, чем записать новое задание крона: http://en.wikipedia.org/wiki/Cron

Кроме того, удостоверьтесь, что Вы используете crontab -e (или подобный) для редактирования файла крона, который удостоверится, что повторно анализируется.

2
ответ дан 4 March 2011 в 19:40

Вы можете попытаться перенаправить ошибки из вашей строки cron в файл, например:

/usr/local/mysqlbackup.sh &>/var/log/mysqlcron.log

Это должно перехватить как stdout и stderr, так и сообщать о любых синтаксических ошибках. и т. д.

Примечание: если вы делаете резервную копию live базы данных, вам следует использовать специальные утилиты для резервного копирования, такие как mysqldump, а не использовать общую команду tar. Причина в том, что если файлы внутри / var / lib / mysql / изменяются во время выполнения tar, вы можете получить несовместимый образ базы данных.

0
ответ дан 4 March 2011 в 19:40

Я изменил расположение файла bash на /usr/local/mysqlbackup.sh. После этого я выполнил следующие команды для файла:

cd /usr/local/
sudo chown [username] mysqlbackup.sh
sudo chmod -rwx mysqlbackup.sh
sudo chmod go= mysqlbackup.sh

, затем перестал использовать ~$ crontab -e как команду для редактирования задания cron и начал использовать sudo nano /etc/crontab, где я создал новую строку задания следующее:

00 20    * * 5  root  /usr/local/mysqlbackup.sh

Я начал использовать этот файл, потому что он позволил мне сказать ему, какой пользователь должен его выполнить. После этих изменений работа cron работает.

0
ответ дан 4 March 2011 в 19:40