Я хочу сделать резервную копию моих папок /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
Несколько замечаний:
Почему вы вообще используете временные строки в /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
, чтобы добавить правило и запустить его. Он по-прежнему должен быть исполняемым, и я бы порекомендовал вам использовать полные пути, но он немного упрощает права доступа.
День недели является числовым полем, таким образом, оно перестало работать при попытке проанализировать 'пятницу'. Изменение, что к 5 (воскресенье 0).править: Я вижу, что OP был обновлен для фиксации этого и существуют все еще проблемы, но они обращены в других ответах.
Формат крона хорошо документируется онлайн, таким образом, я обычно заканчиваю тем, что проверил документы прежде, чем записать новое задание крона: http://en.wikipedia.org/wiki/Cron
Кроме того, удостоверьтесь, что Вы используете crontab -e
(или подобный) для редактирования файла крона, который удостоверится, что повторно анализируется.
Вы можете попытаться перенаправить ошибки из вашей строки cron в файл, например:
/usr/local/mysqlbackup.sh &>/var/log/mysqlcron.log
Это должно перехватить как stdout и stderr, так и сообщать о любых синтаксических ошибках. и т. д.
Примечание: если вы делаете резервную копию live i> базы данных, вам следует использовать специальные утилиты для резервного копирования, такие как mysqldump
, а не использовать общую команду tar. Причина в том, что если файлы внутри / var / lib / mysql / изменяются во время выполнения tar, вы можете получить несовместимый образ базы данных.
Я изменил расположение файла 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 работает.