Cronjob на CentOS, загружать файлы через scp и удалять в случае успеха - PullRequest
0 голосов
/ 21 января 2012

Я использую CentOS 6.

Мне нужно каждый час загружать некоторые файлы на другой сервер.

У меня есть SSH-доступ с паролем к серверу.Но ssh-ключи и т. Д. Не подходят.

Может кто-нибудь помочь мне с сценарием .sh, который загружает файлы через scp и удаляет оригинал после успешной загрузки?

1 Ответ

1 голос
/ 21 января 2012

Для этого я бы предложил использовать rsync, а не scp, так как он гораздо более мощный. Просто поместите следующее в исполняемый скрипт. Здесь я предполагаю, что все файлы (и ничего более) находятся в каталоге, указанном в local_dir /.

#!/bin/env bash
rsync -azrp --progress --password-file=path_to_file_with_password \
local_dir/ remote_user@remote_host:/absolute_path_to_remote_dir/
if [ $? -ne 0 ] ; then 
echo "Something went wrong: don't delete local files."
else
rm -r local_dir/
fi

Возможны следующие варианты (подробнее см., Например, http://ss64.com/bash/rsync.html):

 -a, --archive               Archive mode
 -z, --compress              Compress file data during the transfer
 -r, --recursive             recurse into directories
 -p, --perms                 Preserve permissions
     --progress              Show progress during transfer
     --password-file=FILE    Get password from FILE
     <strike>--delete-after          Receiver deletes after transfer, not during</strike>

Редактировать: удалено --delete-after, поскольку это не является целью ОП

Будьте внимательны при настройке разрешений для файла, содержащего пароль. В идеале только вы должны иметь доступ к файлу.

Как обычно, я бы порекомендовал немного поиграть с rsync, чтобы ознакомиться с ним. Лучше проверить возвращаемое значение rsync (используя $?) Перед удалением локальных файлов.

Больше информации о rsync: http://linux.about.com/library/cmd/blcmdl1_rsync.htm

...