Вопрос Настройка еженедельного резервного копирования 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

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

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

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


6
2018-03-04 13:46


происхождения




ответы:


Несколько пунктов:

  • Почему вы используете timestrings в /etc/cron.weekly/ скрипты вообще? Вы должны использовать только исполняемые скрипты. Вам не нужно им наступать или что-то еще. Это просто дублирует их работу. смотреть на /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 их вашему пользователю, когда это будет сделано резервное копирование.

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


7
2018-03-04 16:11



sudo chmod +x /etc/cron.weekly/mysqlbackup.sh все равно не будет запускать скрипт еженедельно. Cron игнорирует файлы с расширениями в этих каталогах. И вообще, сценарии не должны иметь расширений. - geirha
@geirha Это очень важный комментарий! Это где-то документировано? - Limited Atonement
@LimitedAtonement, если вы посмотрите на значение по умолчанию /etc/crontab, run-parts используется для запуска заданий в /etc/cron.{daily,weekly,monthly} если анакрон «не установлен». бегут-части (8) в свою очередь, объясняет, какие символы разрешены в именах файлов. Я считаю, что главная причина этого заключается в том, чтобы легко отключить работу, просто переименовав jobname в jobname.disabled или похожие. - geirha


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

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

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


2
2018-03-04 14:38



fri и 5 являются действительными. Не все реализации cron позволяют использовать аббревиатуру вместо числа в будний день, но cron в Ubuntu делает. Видеть man 5 contab - geirha


Я изменил местоположение файла 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.


1
2018-03-04 20:22





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

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

Это должно ловить как stdout, так и stderr и сообщать, есть ли синтаксическая ошибка и т. Д.

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


0
2018-03-05 14:56



cron запускает работу с sh, если вы конкретно не говорите об этом иначе, и &> не является синтаксисом sh. >file 2>&1 будет работать как с sh, так и с bash. - geirha
Правда, хорошая точка. - bitwelder