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

Скрипт cron в Ubuntu 9.10 'ec2-согласованный моментальный снимок' не может выполнять файлы и получать доступ к ним

У меня есть образ Ubuntu 9.10, работающий на Amazon EC2, и я настроил сценарий резервного копирования ec2-consisten-snapshot.

Я могу запустить сценарий из SSH, и все работает отлично.

sudo ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-xxxxxxx >>/mnt/backup.log 2>&1

Однако, когда я планирую задание cron в sudo crontab -e, скрипт запускается, но выдает ошибки.

12 18 4 2 *  ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-xxxxxxx >>/mnt/backup.log 2>&1

ec2-согласованный-моментальный снимок: ОШИБКА: не удается найти ключ доступа AWS или секретный ключ доступа в строке 76 / usr / bin / ec2-согласованный-моментальный снимок. xfs_freeze: невозможно разморозить файловую систему, смонтированную в / vol: недопустимый аргумент ec2-согласованный-моментальный снимок : ОШИБКА: xfs_freeze -u / vol: не удалось (256)

Ключи доступа к AWS расположены в $ HOME / .awssecret и работают нормально, если вы не запускаете его из cron.

Может кто-нибудь указать мне, что мне нужно сделать, я пытался понять это на прошлой неделе. Также как мне устранить проблемы с xfs_freeze, который отлично работает из командной строки.

Большое спасибо!

МакЛовин: Я являюсь основным автором моментального снимка с согласованностью ec2. Если вы скопируете .awssecret в /root/.awssecret, он должен работать так, как вы хотите. Есть несколько других способов передать идентификатор ключа доступа и секретный ключ доступа, если вы посмотрите справочную страницу.

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

Я бы добавил сюда полезные ссылки на различные ресурсы, но serverfault мне пока недостаточно доверяет :)

sudo crontab -e правит crontab root правильно? Когда вы говорите, что у вас есть $ HOME / .awssecret, что такое $ HOME? дом root или ваш?

Вы можете подумать об использовании /etc/cron.d, вы можете дополнительно добавить имя пользователя для выполнения скрипта, как в этих файлах (например, осторожно: немного другой синтаксис для скриптов)

Изменить (отвечая на ваш вопрос в комментарии):

Создать файл /etc/cron.d/myEc2Crontab

сделать так, чтобы он содержал:

SHELL=/bin/sh
PATH=whatever you need as your path
12 18 4 2 *  root ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-xxxxxxx >>/mnt/backup.log 2>&1

обратите внимание на добавленный «корень» сразу после указания времени перед вашей командой. Это указывает пользователя, от имени которого запускается команда.

В зависимости от конфигурации sudo не сбрасывает все переменные среды при запуске. Например, когда я sudo в Ubuntu 9.10, $ HOME по-прежнему указывает на домашний каталог моего пользователя, а не на корни!

В вашем скрипте замените $ HOME полным путем к .awssecret.