LINUX.ORG.RU
ФорумAdmin

scp + cron


0

1

набросал скрипт который бекапит файлы и отправляет из через scp на другой сервер. scp запрашивает пароль, пихаю его через expect. если запускать скрипт самому ./lol.sh но всё нормально и архивируется и копируется, если же вешаю на крон этот же скрипт то он только создаёт архивы но не отправляет их.

#!/bin/bash
cd /var/www/backups
find -mtime +14 -name "backup*" -delete
cd /var/www/data
bname=backup`date "+%Y-%m-%d"`.tar.gz
mname=backup_mysql_`date "+%Y-%m-%d"`.tar.gz
pass="querty"
tar czf $bname --exclude="*.tar.gz" www pma
mv $bname ../backups/$bname
backdir="/var/www/backups/tmp"
files=(
db_name
db1_name
)
cd $backdir
for i in "${files[@]}"
do
namedb=backup_"${i}"_`date "+%Y-%m-%d"`
mysqldump -uroot -pquerty -hlocalhost "${i}" > ${namedb}.sql
tar czf ${namedb}.tar.gz ${namedb}.sql
rm ${namedb}.sql
done
tar czf ${mname} --exclude=${mname} *
mv ${mname} ../
cd ../
expect -c "
spawn scp ${bname} ${mname} user@server:/somedir
expect { 
"*password:*" { send $pass\r\n; interact } 
eof { exit }
}
exit
"
rm -rf tmp
mkdir tmp

#crontab
0 2 */7 * * root /var/www/b.sh

на мыло приходит сообщение

spawn scp backup_somedate.tar.gz backup_mysql_somedate.tar.gz user@server:/somedir user@server's password:

ида, ось debian squeeze

а разве нынче scp не проверяет наличие терминала? по-моему, ничего не выйдет, надо делать аутентификацию по ключам. man ssh-keygen.

dmiceman ★★★★★ ()
Ответ на: комментарий от lolshchto

Опять не выспался, про сообщение на мыло не прочитал. Присоединяюсь к соседнему оратору, ключами не проще сделать?

erfea ★★★★★ ()
mysqldump -uroot -pquerty -hlocalhost "${i}" > ${namedb}.sql
tar czf ${namedb}.tar.gz ${namedb}.sql
rm ${namedb}.sql

лучше так

mysqldump -uroot -pquerty -hlocalhost "${i}" | tar czf ${namedb}.tar.gz
уточнить тока нужно умеет ли так tar из stdin принимать или нет =) с 7z аналогично бэкаплю мускул.
и да, spawn scp - нет пути.

fr_butch ()

типа verbose

spawn scp backup2011-10-04.tar.gz backup_mysql_2011-10-04.tar.gz user@server:/somefolder
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {9462}

expect: does "" (spawn_id exp5) match glob pattern "*password:*"? no
user@server's password: 
expect: does "user@server's password: " (spawn_id exp5) match glob pattern "*password:*"? yes
expect: set expect_out(0,string) "user@server's password: "                                                                  
expect: set expect_out(spawn_id) "exp5"
expect: set expect_out(buffer) "user@server's password: "
send: sending "querty\r\n" to { exp5 }
interact: received eof from spawn_id exp0
[[/code]]

#может тут send: sending "querty\r\n" to { exp5 } [u]\r\n[/u] порит?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.