[РЕШЕНО] Запуск drush ard по crontab

Аватар пользователя MKhabibullin MKhabibullin 5 сентября 2012 в 7:04

Вопрос в следующем:
Прописал в crontab скрипт следующего вида:
drush sitealias ard --destination=/root/backup/site.tar.gz -y
mv /root/backup/site.tar.gz /root/backup/site-`date +%d-%m-%Y`.tar.gz

Алиас в конфиге драша есть, команды работают, если их последовательно выполнять. Но вот по контабу это все не срабатывает почему-то =(

ЧЯДНТ ?

0 Thanks

Комментарии

Аватар пользователя MKhabibullin MKhabibullin 5 сентября 2012 в 9:42

Выполняется от имени root скрипт, по crontab -e задача видна, если бы прав не хватало он бы при последовательном выполнении этих двух команд в консоли выводил ошибку

Аватар пользователя MKhabibullin MKhabibullin 6 сентября 2012 в 8:02

Единственное решение, которое приходит на ум - это банально повесить на кронтаб скрипт с mysqldump и tar, но это не оченб удобно, так как сайтов несколько и каждый раз править алиасы для драша и отдельно для каждого сайта прописывать в кроне mysqldump и tar гораждо дольше, решение с drush было бы гораздо быстрее, как в плане создания бекапов, так и в плане переноса на другую vps/восстановления сайтов из архивов.

Аватар пользователя andribas74 andribas74 6 сентября 2012 в 8:31

А не проще скрипт на баше написать?

#!/bin/sh
d=`date +%Y-%m-%d`
dd="/home/backup/sql/$d"
rsync -r -t -l /var/www/site.ru /home/backup/www/
mkdir $dd

tar -czf $dd/site.ru.tgz /home/backup/www/site.ru
mysqldump -u user --password=pass site_db >$dd/site.sql
gzip $dd/site.sql

синкается на всякий случай, вдруг кто-нить заливает что-то на сайт. ну и по идее кеш оттуда выкинуть надо, он тож лишний

По идее, еще 1 скрипт нужен, чтобы старые бэкапы стирать, и отдельно записывать weekly, month - ну это если по ТЗ нужно.

Если сайтов несколько, то добавляете цикл for, и site делаете переменной.

П.С. сам скрипт выполняется кроном
0 7 * * 1-5 /bin/sh /home/backup/bin/backup.sh
только права проверьте

Аватар пользователя MKhabibullin MKhabibullin 6 сентября 2012 в 8:32
"andribas74" wrote:

По идее, еще 1 скрипт нужен, чтобы старые бэкапы стирать, и отдельно записывать weekly, month - ну это если по ТЗ нужно.

Так раньше и было, бекапы делались через mysqldump и tar, но хочется все это завязать на drush, чтобы при необходимости быстро развернуть копию сайта на тестовой vps или перенести на другой сервер.

Аватар пользователя andribas74 andribas74 6 сентября 2012 в 8:39

Ну тады можт что-то вроде "2>&1 1>/root/drush_error"
в крон добавить и какой-нить дебаг включить в драше и посмотреть что он пишет?

Аватар пользователя MKhabibullin MKhabibullin 6 сентября 2012 в 11:30

а вот не пишет он ошибок никаких =(
Вот только запись о том, что скрипт вызывался в var/log/cron :
Sep 5 01:00:01 servname crond[21990]: (root) CMD (/root/scripts/backup)

Аватар пользователя Orion76 Orion76 6 сентября 2012 в 11:51

а конфиги алиасов драш в чьей домашней папке?

ЗЫ:
http://drush.ws/examples/example.aliases.drushrc.php
Using --quiet
By default, drush will print a success message when the run of cron is completed. The --quiet flag will suppress these and other progress messages, again avoiding an unnecessary email message.

Аватар пользователя MKhabibullin MKhabibullin 6 сентября 2012 в 12:04

Конфиги в папке юзера root, конечно, алиасы отрабатывают
Про ключ --quitet не знал, сейчас проверю =)

Аватар пользователя MKhabibullin MKhabibullin 7 сентября 2012 в 7:12

Так, перенаправил вчера вывод в отдельный файл через crontab вот так:
10 00 * * * /root/scripts/backup >> /var/log/drushback 2>&1
В скрипте дописал ключ --quiet
В результате в лог упало:

/root/scripts/backup: line 8: drush: command not found
mv: cannot stat `/root/backup/backup.tar.gz': No such file or directory

Как понял, просто не срабатывает алиас команды drush (вторая ошибка вызвана тем, что скрипт бекапа не отрабатывает, поэтому архив не создается).

Это весьма странно, так как drush по кронтабу выполняется от имени root, а залогиневшись под root-ом команды вида drush [команда] срабатывают. Получается, что крон игнорирует символическую ссылку "drush"...

Аватар пользователя danylevskyi danylevskyi 7 сентября 2012 в 9:30

В скрипте нужно указывать полный путь до Drush.

Ошибка:
drush @alias cc all

Правильно:
/path/to/drush @alias cc all