Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование *NIX систем > Скрипт закачки сайта.


Автор: Хоббит 17.10.2008, 18:49
Была такая задача: написать скрипт для закачки сайтов на хостинг. Необходимо было закачивать файлы сайта и таблицы базы данных. Файли и таблицы передавались через параметры.
Порядок действий примерно такой.

Получить настройки сайта.

Получить список файлов из параметров.
Получить список таблиц из параметров.

Перейти в папку сайта.
Заархивировать необходимые файлы.
Передать файлы на хостинг через scp
Разархивировать файлы на хостинге через ssh

Сделать дамп необходимых таблиц
Заархивировать дамп
Передать дамп на хостинг
Выполнить дамп

Сделал вот так. Это мой первый sheell скрипт, дайте комментарии, что можно улучшить, что написал не так

Система linux debian

Код

. /lib/lsb/init-functions

site_name=$1
shift

set -- getopt f:t: $*

files=''
tables=''

hasFiles=0
hasTables=0

for arg in $*; do
  
  case $arg in
  -f) isFile=1; isTable=0; hasFiles=1; shift;;
  -t) isFile=0; isTable=1; hasTables=1; shift;;
  
  *) 
    if [ "$isFile" = 1 ]
      then              
        files="$files $arg"
    fi    
    
    if [ "$isTable" = 1 ]
      then
        tables="$tables $arg"
    fi
    shift;;
    
  --) shift; break;
  esac
done

if [ -z "$files" ]
  then files='*'
fi

log_action_begin_msg 'Loading vars'
. /etc/upsite/$site_name 2>/dev/null && \
log_action_end_msg $? || \
{ log_action_end_msg 1; exit; }

site_exclude_option=''

for site_exclude_file in $site_exclude; do
  site_exclude_option="$site_exclude_option --exclude=$site_exclude_file"  
done

cd $site_local_dir

if [ "$hasFiles" = 1 ]    
then

  log_action_begin_msg 'Archiving files'
  tar czf $site_name.tar.gz $site_exclude_option $files 2>/dev/null && \
  log_action_end_msg $? || \
  { log_action_end_msg $?; exit; }

  log_action_begin_msg 'Uploading archive'
  scp -i $ssh_identity $site_name.tar.gz $ssh_user@$ssh_server:$site_remote_dir 1>/dev/null 2>/dev/null && \
  log_action_end_msg $? || \
  { log_action_end_msg $?; exit; }

  rm $site_name.tar.gz

  log_action_begin_msg 'Extract files'
  ssh -i $ssh_identity $ssh_user@$ssh_server "cd $site_remote_dir; tar xzf $site_name.tar.gz; rm $site_name.tar.gz" && \
  log_action_end_msg $? || \
  { log_action_end_msg $?; exit; }
fi

if [ "$hasTables" = 1 ]
then
  log_action_begin_msg 'Dump database'
  mysqldump -u$mysql_local_user -p$mysql_local_pass $site_local_base $tables > $site_local_dir/$site_name.sql && \
  log_action_end_msg $? || \
  { log_action_end_msg $?; exit; }

  log_action_begin_msg 'Archiving dump'
  tar czf $site_name.sql.tar.gz $site_name.sql 2>/dev/null && \
  log_action_end_msg $? || \
  { log_action_end_msg $?; exit; }
  
  log_action_begin_msg 'Uploading dump'
  scp -i $ssh_identity $site_local_dir/$site_name.sql.tar.gz $ssh_user@$ssh_server:$site_remote_dir 1>/dev/null 2>/dev/null && \
  log_action_end_msg $? || \
  { log_action_end_msg $?; exit; }

  rm $site_name.sql
  rm $site_name.sql.tar.gz
  
  log_action_begin_msg 'Query dump'
  ssh -i $ssh_identity $ssh_user@$ssh_server "cd $site_remote_dir; tar xzf $site_name.sql.tar.gz; mysql -u$mysql_remote_user -p$mysql_remote_pass -h$mysql_remote_host $site_remote_base < $site_name.sql; rm $site_name.sql.tar.gz; rm $site_name.sql" 1>/dev/null 2>/dev/null && \
  log_action_end_msg $? || \
  { log_action_end_msg $?; exit; }
fi

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)