Была такая задача: написать скрипт для закачки сайтов на хостинг. Необходимо было закачивать файлы сайта и таблицы базы данных. Файли и таблицы передавались через параметры. Порядок действий примерно такой.
Получить настройки сайта.
Получить список файлов из параметров. Получить список таблиц из параметров.
Перейти в папку сайта. Заархивировать необходимые файлы. Передать файлы на хостинг через 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
|
|