А давайте мне поможем с кроном.

12
M
На сайте с 28.02.2006
Offline
236
2204

Есть скриптик backup.sh который лежит тут /root/backup/backup.sh Что он делает наверно все догадались, ну а если быть точнее он запускает процесс синхронизации некоторых данных через shell с другим сервером. Если запустить вот такую штуку

/root/backup/backup.sh >> /var/log/rsync_auto.log

то процесс проходит на ура а если эту строку поставить в крон, то ничего не происходит. Т.е. вообще ничего и в лог не пишет.

dkameleon
На сайте с 09.12.2005
Offline
386
#1

может быть крон выполняется с правами, не достаточными для запуска скрипта? (судя по директории)

в этом случае попробуйте увеличить права досткпа к скрипту.

Дизайн интерьера (http://balabukha.com/)
M
На сайте с 28.02.2006
Offline
236
#2

под рутом выполняется крон

Lupus
На сайте с 02.11.2002
Offline
241
#3

Во-первых. Проверьте, чтобы в скрипте был указан шелл, под которым его надо выполнять.

То есть первая строка скрипта должна быть где-то такая: #!/bin/sh

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

Во-вторых, если это не поможет, укажите явно переменную окружения $PATH

В частности в crontab, перед назначенными заданиями должна быть строка:

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin

Если не поможет и это, пишите, будем думать дальше. :)

There are two types of people in this world: 1. Those who can extrapolate from incomplete data.
M
На сайте с 28.02.2006
Offline
236
#4

Чтобы не гадать приведу код


#!/usr/bin/expect -f
#

spawn rsync -vRae "/usr/bin/ssh -p 22 -l <USER>" --progress --stats --compress --delete --exclude-from=/root/backup/excludes --include-from=/root/backup/includes / "<USER>@<OTHERHOST.TLD>:~</PATH/TO/BACKUP>"
set rsync_spawn_id $spawn_id
expect "Password:" { send "<PASSWORD>\r" }
interact

Думаю все должно быть понятно. excludes - это то, что не нужно синхронизировать, includes то что нужно.

Скрипт не мой, да и я не большой спец в них. Нужно ли в данном случае добавлять

#!/bin/sh

Lupus
На сайте с 02.11.2002
Offline
241
#5
mihas:
Нужно ли в данном случае добавлять
#!/bin/sh

Не нужно. Но надо или полностью указать пути ко всем командам (например, вместо rsync - /usr/local/bin/rsync), либо, после #!/usr/bin/expect -f добавить строку

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin

(или "set PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin")

Да и в самом crontab лучше команду

/root/backup/backup.sh >> /var/log/rsync_auto.log

временно написать так:

/root/backup/backup.sh 2> /var/log/rsync_error.log

Тогда в файле /var/log/rsync_error.log можно будет увидеть в чем неполадка.

M
На сайте с 28.02.2006
Offline
236
#6

Докладываю. Введение PATH ничего не дало.

В логах появляется следующая запись

spawn rsync -vRae /usr/bin/ssh -p 22 -l <USER> --progress --stats --compress --delete --exclude-from=/root/backup/excludes --include-from=/root/backup/includes  / <USER>@<OTHERHOST.TLD>:~</PATH/TO/BACKUP>

Password:

В логах бэкапсервера видим следующую картину

Nov  6 23:13:42 localhost sshd[26771]: (pam_unix) authentication failure; lognam

e= uid=0 euid=0 tty=ssh ruser= rhost=HOST.TLD user=USER
Nov 6 23:13:44 localhost sshd[26768]: error: PAM: Authentication failure for USER from HOST.TLD

Вобщем выходит, что он стучится, но его не пускают. Вопрос почему. При запуске в командной строке все работает а из крона не пускает.

Lupus
На сайте с 02.11.2002
Offline
241
#7
mihas:
Вопрос почему.

Для ssh надо бы еще находить свой ~/.ssh/known_hosts

Иначе будет эта ошибка. Полагаю, надо бы выставить переменную HOME=/root

Это не окончательный вердикт, но похоже. Попробуйте выставить ее в crontab (HOME=/root) или в самом скрипте (set HOME "/root").

Или сделать cat ~/.ssh/known_hosts >> /etc/ssh/ssh_known_hosts

Оттуда он тоже должен его подцепить.

Andreyka
На сайте с 19.02.2005
Offline
822
#8
mihas:
Чтобы не гадать приведу код
Скрипт не мой, да и я не большой спец в них. Нужно ли в данном случае добавлять
#!/bin/sh

Выкинье скрипт и используйте эту строку:

rsync -crlptgu --delete --force -e ssh /где/бекапы логин@хост:/куда/складывать

Естественно что хост надо сделать по ssh-key.

Строку вбиваете прямо в крон. Ну можно еще указать полтный путь к rsync.

Не стоит плодить сущности без необходимости
M
На сайте с 28.02.2006
Offline
236
#9

Lupus, никаких изменений, тот же результат. С крона не заводится.

Andreyka, можно чуть подробнее. В принципе это тоже самое, только текста меньше:) Как сделать в данном случае

Естественно что хост надо сделать по ssh-key.

И потом, если приведенную вам строку поставить на крон, то также будет проблема с входом по ssh, пароль спрашивается дополнительно.

M
На сайте с 28.02.2006
Offline
236
#10

Все, всем спасибо. Сделал.

Последний вопрос. Как лучше, не могу для себя решить, Лучше чтобы скрипт запускался на web сервере и сливал все на бэкап сервер или чтобы скрипт запускался на бэкап сервере и сам стягивал все с web сервера?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий