v-restore-user 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. #!/bin/bash
  2. # info: restore user
  3. # options: USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIR] [NOTIFY]
  4. #
  5. # The function for resotring user from backup.
  6. #----------------------------------------------------------#
  7. # Variable&Function #
  8. #----------------------------------------------------------#
  9. # Import VESTA variable for cron launch
  10. source /etc/profile
  11. # Argument definition
  12. user=$1
  13. backup=$2
  14. web=$3
  15. dns=$4
  16. mail=$5
  17. db=$6
  18. cron=$7
  19. udir=$8
  20. notify=${9-no}
  21. # Define backup dir
  22. if [ -z "$BACKUP" ]; then
  23. BACKUP=/backup
  24. fi
  25. # Includes
  26. source $VESTA/func/main.sh
  27. source $VESTA/func/domain.sh
  28. source $VESTA/func/ip.sh
  29. source $VESTA/func/db.sh
  30. source $VESTA/func/rebuild.sh
  31. source $VESTA/conf/vesta.conf
  32. # Check backup function
  33. is_backup_valid() {
  34. if [ ! -e "$1" ]; then
  35. check_result $E_NOTEXIST "backup $1 doesn't exist"
  36. fi
  37. }
  38. # Check backup ownership function
  39. is_backup_available() {
  40. if ! [[ $2 =~ ^$1.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].tar$ ]]; then
  41. check_result $E_FORBIDEN "permission denied"
  42. fi
  43. }
  44. #----------------------------------------------------------#
  45. # Verifications #
  46. #----------------------------------------------------------#
  47. args_usage='USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIR] [NOTIFY]'
  48. check_args '2' "$#" "$args_usage"
  49. is_format_valid 'user' 'backup'
  50. is_backup_valid "$BACKUP/$backup"
  51. is_backup_available "$user" "$backup"
  52. #----------------------------------------------------------#
  53. # Action #
  54. #----------------------------------------------------------#
  55. # Checking user existance on the server
  56. check_user=$(is_object_valid 'user' 'USER' "$user")
  57. if [ -z "$check_user" ]; then
  58. is_object_unsuspended 'user' 'USER' "$user"
  59. subj="$user → restore failed"
  60. email=$(get_user_value '$CONTACT')
  61. else
  62. create_user="yes"
  63. email=$(grep CONTACT $VESTA/data/users/admin/user.conf | cut -f2 -d \')
  64. fi
  65. # Checking avaiable disk space
  66. disk_usage=$(df $BACKUP |tail -n1 |tr ' ' '\n' |grep % |cut -f 1 -d %)
  67. if [ "$disk_usage" -ge "$BACKUP_DISK_LIMIT" ]; then
  68. echo "Error: Not enough disk space" |$SENDMAIL -s "$subj" $email $notify
  69. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  70. check_result $E_DISK "Not enough disk space"
  71. fi
  72. # Checking load average
  73. la=$(cat /proc/loadavg |cut -f 1 -d ' ' |cut -f 1 -d '.')
  74. i=0
  75. while [ "$la" -ge "$BACKUP_LA_LIMIT" ]; do
  76. echo -e "$(date "+%F %T") Load Average $la"
  77. sleep 60
  78. if [ "$i" -ge "15" ]; then
  79. la_error="LoadAverage $la is above threshold"
  80. echo "Error: $la_error" |$SENDMAIL -s "$subj" $email $notify
  81. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  82. check_result $E_LA "$la_error"
  83. fi
  84. la=$(cat /proc/loadavg |cut -f 1 -d ' ' |cut -f 1 -d '.')
  85. (( ++i))
  86. done
  87. # Creating temporary directory
  88. tmpdir=$(mktemp -p $BACKUP -d)
  89. if [ "$?" -ne 0 ]; then
  90. echo "Can't create tmp dir $tmpdir" |$SENDMAIL -s "$subj" $email $notify
  91. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  92. check_result "$E_NOTEXIST" "can't create tmp dir"
  93. fi
  94. # Restoring user account
  95. if [ "$create_user" = 'yes' ]; then
  96. echo "-- USER --" |tee $tmpdir/restore.log
  97. echo -e "$(date "+%F %T") $user" |tee -a $tmpdir/restore.log
  98. # Unpacking user container
  99. tar xf $BACKUP/$backup -C $tmpdir ./vesta
  100. if [ "$?" -ne 0 ]; then
  101. rm -rf $tmpdir
  102. echo "Can't unpack user contaner" |$SENDMAIL -s "$subj" $email $notify
  103. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  104. check_result "$E_PARSING" "can't unpack user contaner"
  105. fi
  106. # Restoring user.conf
  107. mkdir $USER_DATA
  108. cp $tmpdir/vesta/user.conf $USER_DATA/
  109. cp -r $tmpdir/vesta/ssl $USER_DATA/ >/dev/null 2>&1
  110. cp $tmpdir/vesta/backup-excludes.conf $USER_DATA/ >/dev/null 2>&1
  111. # Rebuilding user
  112. rebuild_user_conf
  113. fi
  114. # Unpacking pam container
  115. tar xf $BACKUP/$backup -C $tmpdir ./pam
  116. if [ "$?" -ne 0 ]; then
  117. rm -rf $tmpdir
  118. echo "Can't unpack PAM contaner" |$SENDMAIL -s "$subj" $email $notify
  119. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  120. check_result "$E_PARSING" "can't unpack PAM contaner"
  121. fi
  122. old_user=$(cut -f 1 -d : $tmpdir/pam/passwd)
  123. old_uid=$(cut -f 3 -d : $tmpdir/pam/passwd)
  124. new_uid=$(grep "^$user:" /etc/passwd |cut -f 3 -d :)
  125. # Restoring web domains
  126. if [ "$web" != 'no' ] && [ ! -z "$WEB_SYSTEM" ]; then
  127. echo -e "\n-- WEB --" |tee -a $tmpdir/restore.log
  128. # Creating web domain restore list
  129. backup_domains=$(tar -tf $BACKUP/$backup |grep "^./web")
  130. backup_domains=$(echo "$backup_domains" |grep domain_data.tar.gz)
  131. backup_domains=$(echo "$backup_domains" |cut -f 3 -d /)
  132. if [ -z "$web" ] || [ "$web" = '*' ]; then
  133. domains="$backup_domains"
  134. else
  135. echo "$web" |tr ',' '\n' > $tmpdir/selected.txt
  136. domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt)
  137. fi
  138. # Restoring web domain
  139. for domain in $domains; do
  140. echo -e "$(date "+%F %T") $domain" |tee -a $tmpdir/restore.log
  141. # Checking domain existance
  142. check_config=$(grep "DOMAIN='$domain'" $USER_DATA/web.conf)
  143. if [ -z "$check_config" ]; then
  144. check_new=$(is_domain_new 'web' $domain)
  145. if [ ! -z "$check_new" ]; then
  146. rm -rf $tmpdir
  147. error="$domain belongs to another user"
  148. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  149. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  150. check_result "$E_PARSING" "$error"
  151. fi
  152. fi
  153. # Unpacking domain container
  154. tar xf $BACKUP/$backup -C $tmpdir ./web/$domain
  155. if [ "$?" -ne 0 ]; then
  156. rm -rf $tmpdir
  157. error="Can't unpack $domain web container"
  158. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  159. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  160. check_result "$E_PARSING" "$error"
  161. fi
  162. # Restoring web.conf
  163. if [ -z "$check_config" ]; then
  164. eval $(cat $tmpdir/web/$domain/vesta/web.conf)
  165. # Deleting conflicting aliases
  166. for dom_alias in ${ALIAS//,/ }; do
  167. check_new=$(is_domain_new 'web' $dom_alias)
  168. if [ ! -z "$check_new" ]; then
  169. ALIAS=$(echo "$ALIAS" |\
  170. sed "s/,/\n/g"|\
  171. sed "s/^$dom_alias$//g"|\
  172. sed "/^$/d"|\
  173. sed ':a;N;$!ba;s/\n/,/g')
  174. fi
  175. done
  176. # Checking ip address
  177. check_ip=$(is_ip_valid $IP $user)
  178. if [ ! -z "$check_ip" ]; then
  179. local_ip=''
  180. get_user_ip $user
  181. old_ip=$IP
  182. IP=$ip
  183. fi
  184. # Checking web template
  185. check_tpl=$(is_web_template_valid $TPL)
  186. if [ ! -z "$check_tpl" ]; then
  187. TPL='default'
  188. fi
  189. # Checking proxy template
  190. check_proxy_tpl=$(is_proxy_template_valid $PROXY)
  191. if [ ! -z "$check_proxy_tpl" ]; then
  192. PROXY='default'
  193. fi
  194. # Checking backend template
  195. check_backend_tpl=$(is_backend_template_valid $BACKEND)
  196. if [ ! -z "$check_proxy_tpl" ]; then
  197. BACKEND='default'
  198. fi
  199. # Converting ftp users
  200. if [ ! -z "$FTP_USER" ]; then
  201. FTP_USER=$(echo "$FTP_USER" |sed -e "s/${old_user}_//")
  202. FTP_USER="${user}_${FTP_USER}"
  203. fi
  204. # Converting stats users
  205. if [ ! -z "$STATS_USER" ]; then
  206. STATS_USER=$(echo "$STATS_USER" |sed -e "s/${old_user}_//")
  207. STATS_USER="${user}_${STATS_USER}"
  208. fi
  209. # Copying ssl certificates
  210. if [ "$SSL" = 'yes' ]; then
  211. for crt in $(ls $tmpdir/web/$domain/conf |grep ssl); do
  212. crt=$(echo "$crt" |sed "s/ssl.//")
  213. cp -f $tmpdir/web/$domain/conf/ssl.$crt $USER_DATA/ssl/$crt
  214. done
  215. fi
  216. # Concatenating web.conf keys
  217. str="DOMAIN='$domain' IP='$IP' IP6='$IP6' ALIAS='$ALIAS'"
  218. str="$str TPL='$TPL' SSL='$SSL' SSL_HOME='$SSL_HOME'"
  219. str="$str FTP_USER='$FTP_USER' FTP_MD5='$FTP_MD5'"
  220. str="$str BACKEND='$BACKEND' PROXY='$PROXY'"
  221. str="$str PROXY_EXT='$PROXY_EXT' STATS='$STATS'"
  222. str="$str STATS_USER='$STATS_USER' STATS_CRYPT='$STATS_CRYPT'"
  223. str="$str U_DISK='$U_DISK' U_BANDWIDTH='0' SUSPENDED='no'"
  224. str="$str TIME='$(date +%T)' DATE='$(date +%F)'"
  225. echo $str >> $USER_DATA/web.conf
  226. # Rebuilding backend
  227. if [ ! -z "$WEB_BACKEND" ]; then
  228. $BIN/v-add-web-domain-backend $user $domain $BACKEND
  229. fi
  230. # Rebuilding vhost
  231. rebuild_web_domain_conf
  232. fi
  233. # Restoring web domain data
  234. tar -xzpf $tmpdir/web/$domain/domain_data.tar.gz \
  235. -C $HOMEDIR/$user/web/$domain/
  236. if [ "$?" -ne 0 ]; then
  237. rm -rf $tmpdir
  238. error="can't unpack $domain data tarball"
  239. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  240. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  241. check_result "$E_PARSING" "$error"
  242. fi
  243. # Applying Fix for tar < 1.24
  244. find $HOMEDIR/$user/web/$domain -type d \
  245. -exec chown -h $user:$user {} \;
  246. # Re-chowning files if uid differs
  247. if [ "$old_uid" -ne "$new_uid" ]; then
  248. find $HOMEDIR/$user/web/$domain/ -user $old_uid \
  249. -exec chown -h $user:$user {} \;
  250. fi
  251. done
  252. # Adding user to traff queue
  253. sed -i "/ $user /d" $VESTA/data/queue/traffic.pipe
  254. echo "$BIN/v-update-web-domains-traff $user" >>\
  255. $VESTA/data/queue/traffic.pipe
  256. # Restarting web server
  257. $BIN/v-restart-web
  258. check_result $? "Web restart failed"
  259. if [ ! -z "$PROXY_SYSTEM" ]; then
  260. $BIN/v-restart-proxy
  261. check_result $? "Proxy restart failed"
  262. fi
  263. fi
  264. # Restoring dns domains
  265. if [ "$dns" != 'no' ] && [ ! -z "$DNS_SYSTEM" ]; then
  266. echo -e "\n-- DNS --" |tee -a $tmpdir/restore.log
  267. # Creating dns domain restore list
  268. backup_domains=$(tar -tf $BACKUP/$backup |grep "^./dns")
  269. backup_domains=$(echo "$backup_domains" |grep "dns.conf$")
  270. backup_domains=$(echo "$backup_domains" |cut -f 3 -d /)
  271. if [ -z "$dns" ] || [ "$dns" = '*' ]; then
  272. domains="$backup_domains"
  273. else
  274. echo "$dns" |tr ',' '\n' > $tmpdir/selected.txt
  275. domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt)
  276. fi
  277. # Restoring dns domain
  278. for domain in $domains; do
  279. echo -e "$(date "+%F %T") $domain" |tee -a $tmpdir/restore.log
  280. # Checking domain existance
  281. check_config=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
  282. if [ -z "$check_config" ]; then
  283. check_new=$(is_domain_new 'dns' $domain)
  284. if [ ! -z "$check_new" ]; then
  285. rm -rf $tmpdir
  286. error="$domain belongs to another user"
  287. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  288. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  289. check_result "$E_PARSING" "$error"
  290. fi
  291. fi
  292. # Unpacking domain container
  293. tar xf $BACKUP/$backup -C $tmpdir ./dns/$domain
  294. if [ "$?" -ne 0 ]; then
  295. rm -rf $tmpdir
  296. error="Can't unpack $domain dns container"
  297. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  298. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  299. check_result "$E_PARSING" "$error"
  300. fi
  301. # Restoring dns.conf
  302. if [ -z "$check_config" ]; then
  303. eval $(cat $tmpdir/dns/$domain/vesta/dns.conf)
  304. # Checking ip address
  305. check_ip=$(is_ip_valid $IP $user)
  306. if [ ! -z "$check_ip" ]; then
  307. local_ip=''
  308. get_user_ip $user
  309. old_ip=$IP
  310. IP=$ip
  311. fi
  312. # Checking dns template
  313. check_tpl=$(is_dns_template_valid $TPL)
  314. if [ ! -z "$check_tpl" ]; then
  315. TPL='default'
  316. fi
  317. # Concatenating dns.conf keys
  318. str="DOMAIN='$domain' IP='$IP' TPL='$TPL' TTL='$TTL' EXP='$EXP'"
  319. str="$str SOA='$SOA' RECORDS='$RECORDS' SUSPENDED='no'"
  320. str="$str TIME='$(date +%T)' DATE='$(date +%F)'"
  321. echo $str >> $USER_DATA/dns.conf
  322. fi
  323. # Restoring dns records
  324. cp -f $tmpdir/dns/$domain/vesta/$domain.conf $USER_DATA/dns/
  325. # Rebuilding dns domain
  326. rebuild_dns_domain_conf
  327. done
  328. # Restarting DNS
  329. $BIN/v-restart-dns
  330. check_result $? "DNS restart failed"
  331. fi
  332. # Restoring mail domains
  333. if [ "$mail" != 'no' ] && [ ! -z "$MAIL_SYSTEM" ]; then
  334. echo -e "\n-- MAIL --" |tee -a $tmpdir/restore.log
  335. # Creating mail domain restore list
  336. backup_domains=$(tar -tf $BACKUP/$backup |grep "^./mail")
  337. backup_domains=$(echo "$backup_domains" |grep "mail.conf$")
  338. backup_domains=$(echo "$backup_domains" |cut -f 3 -d /)
  339. if [ -z "$mail" ] || [ "$mail" = '*' ]; then
  340. domains="$backup_domains"
  341. else
  342. echo "$mail" |tr ',' '\n' > $tmpdir/selected.txt
  343. domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt)
  344. fi
  345. # Restoring dns domain
  346. for domain in $domains; do
  347. echo -e "$(date "+%F %T") $domain" |tee -a $tmpdir/restore.log
  348. # Checking domain existance
  349. check_config=$(grep "DOMAIN='$domain'" $USER_DATA/mail.conf)
  350. if [ -z "$check_config" ]; then
  351. check_new=$(is_domain_new 'mail' $domain)
  352. if [ ! -z "$check_new" ]; then
  353. rm -rf $tmpdir
  354. error="$domain belongs to another user"
  355. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  356. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  357. check_result "$E_PARSING" "$error"
  358. fi
  359. fi
  360. # Unpacking domain container
  361. tar xf $BACKUP/$backup -C $tmpdir ./mail/$domain
  362. if [ "$?" -ne 0 ]; then
  363. rm -rf $tmpdir
  364. error="Can't unpack $domain mail container"
  365. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  366. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  367. check_result "$E_PARSING" "$error"
  368. fi
  369. # Restoring mail.conf
  370. if [ -z "$check_config" ]; then
  371. cat $tmpdir/mail/$domain/vesta/mail.conf >> $USER_DATA/mail.conf
  372. fi
  373. # Restoring DKIM
  374. if [ -e "$tmpdir/mail/$domain/vesta/$domain.pem" ]; then
  375. cp -f $tmpdir/mail/$domain/vesta/$domain.pem $USER_DATA/mail/
  376. cp -f $tmpdir/mail/$domain/vesta/$domain.pub $USER_DATA/mail/
  377. fi
  378. # Restoring email accounts
  379. cp -f $tmpdir/mail/$domain/vesta/$domain.conf $USER_DATA/mail/
  380. # Rebuilding mail config
  381. rebuild_mail_domain_conf
  382. # Restoring emails
  383. if [ -e "$tmpdir/mail/$domain/accounts.tar.gz" ]; then
  384. tar -xzpf $tmpdir/mail/$domain/accounts.tar.gz \
  385. -C $HOMEDIR/$user/mail/$domain_idn/
  386. if [ "$?" -ne 0 ]; then
  387. rm -rf $tmpdir
  388. error="Can't unpack $domain mail account container"
  389. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  390. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  391. check_result "$E_PARSING" "$error"
  392. fi
  393. # Re-chowning files if uid differs
  394. if [ "$old_uid" -ne "$new_uid" ]; then
  395. find $HOMEDIR/$user/mail/$domain_idn -user $old_uid \
  396. -exec chown -h $user:mail {} \;
  397. fi
  398. fi
  399. done
  400. fi
  401. # Restoring databases
  402. if [ "$db" != 'no' ] && [ ! -z "$DB_SYSTEM" ]; then
  403. echo -e "\n-- DB --" |tee -a $tmpdir/restore.log
  404. # Creating database restore list
  405. backup_databases=$(tar -tf $BACKUP/$backup |grep "^./db")
  406. backup_databases=$(echo "$backup_databases" |grep db.conf)
  407. backup_databases=$(echo "$backup_databases" |cut -f 3 -d / |sort -u)
  408. if [ -z "$db" ] || [ "$db" = '*' ]; then
  409. databases="$backup_databases"
  410. else
  411. echo "$db" |tr ',' '\n' > $tmpdir/selected.txt
  412. databases=$(echo "$backup_databases" |egrep -f $tmpdir/selected.txt)
  413. fi
  414. # Restoring database
  415. for database in $databases; do
  416. echo -e "$(date "+%F %T") $database" |tee -a $tmpdir/restore.log
  417. # Checking database existance
  418. check_config=$(grep "DB='$database'" $USER_DATA/db.conf)
  419. # Unpacking database container
  420. tar xf $BACKUP/$backup -C $tmpdir ./db/$database
  421. if [ "$?" -ne 0 ]; then
  422. rm -rf $tmpdir
  423. error="Can't unpack $database database container"
  424. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  425. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  426. check_result "$E_PARSING" "$error"
  427. fi
  428. # Restore database config
  429. if [ -z "$check_config" ]; then
  430. eval $(cat $tmpdir/db/$database/vesta/db.conf)
  431. DB=$(echo "$DB" |sed -e "s/${old_user}_//")
  432. DB="${user}_${DB}"
  433. DBUSER=$(echo "$DBUSER" |sed -e "s/${old_user}_//")
  434. DBUSER="${user}_${DBUSER}"
  435. str="DB='$DB' DBUSER='$DBUSER' MD5='$MD5' HOST='$HOST'"
  436. str="$str TYPE='$TYPE' CHARSET='$CHARSET' U_DISK='$U_DISK'"
  437. str="$str SUSPENDED='no' TIME='$(date +%T)' DATE='$(date +%F)'"
  438. echo $str >> $USER_DATA/db.conf
  439. else
  440. eval $(grep "DB='$database'" $USER_DATA/db.conf)
  441. fi
  442. # Unziping database dump
  443. gzip -d $tmpdir/db/$database/$database.*.sql.gz
  444. # Importing database dump
  445. database_dump="$tmpdir/db/$database/$database.$TYPE.sql"
  446. case $TYPE in
  447. mysql) rebuild_mysql_database;
  448. import_mysql_database $database_dump ;;
  449. pgsql) rebuild_pgsql_database;
  450. import_pgsql_database $database_dump ;;
  451. esac
  452. done
  453. fi
  454. # Restoring cron jobs
  455. if [ "$cron" != 'no' ] && [ ! -z "CRON_SYSTEM" ]; then
  456. echo -e "\n-- CRON --" |tee -a $tmpdir/restore.log
  457. # Unpacking cron container
  458. tar xf $BACKUP/$backup -C $tmpdir ./cron
  459. if [ "$?" -ne 0 ]; then
  460. rm -rf $tmpdir
  461. error="Can't unpack cron container"
  462. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  463. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  464. check_result "$E_PARSING" "$error"
  465. fi
  466. jobs=$(wc -l $tmpdir/cron/cron.conf |cut -f 1 -d' ')
  467. if [ "$jobs" -eq 1 ]; then
  468. echo -e "$(date "+%F %T") $jobs cron job" |tee -a $tmpdir/restore.log
  469. else
  470. echo -e "$(date "+%F %T") $jobs cron jobs"|tee -a $tmpdir/restore.log
  471. fi
  472. # Restoring cron jobs
  473. cp $tmpdir/cron/cron.conf $USER_DATA/cron.conf
  474. # Rebuilding cron jobs
  475. sync_cron_jobs
  476. # Restarting cron
  477. $BIN/v-restart-cron
  478. check_result $? "CRON restart failed"
  479. fi
  480. # Restoring user files and directories
  481. if [ "$udir" != 'no' ]; then
  482. echo -e "\n-- USER FILES --" |tee -a $tmpdir/restore.log
  483. # Unpacking user dir container
  484. if [ ! -z "$(tar -tf $BACKUP/$backup |grep './user_dir')" ]; then
  485. # Creating user dir restore list
  486. backup_dirs=$(tar -tf $BACKUP/$backup |grep "^./user_dir")
  487. backup_dirs=$(echo "$backup_dirs" |grep tar.gz)
  488. backup_dirs=$(echo "$backup_dirs" |cut -f 3 -d /)
  489. backup_dirs=$(echo "$backup_dirs" |sed "s/.tar.gz//")
  490. if [ -z "$udir" ] || [ "$udir" = '*' ]; then
  491. user_dirs="$backup_dirs"
  492. else
  493. echo "$udir" |tr ',' '\n' > $tmpdir/selected.txt
  494. user_dirs=$(echo "$backup_dirs" |egrep -f $tmpdir/selected.txt)
  495. fi
  496. for user_dir in $user_dirs; do
  497. echo -e "$(date "+%F %T") $user_dir" |tee -a $tmpdir/restore.log
  498. tar xf $BACKUP/$backup -C $tmpdir ./user_dir/$user_dir.tar.gz
  499. if [ "$?" -ne 0 ]; then
  500. error="can't unpack $user_dir user dir contaner"
  501. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  502. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  503. check_result "$E_PARSING" "$error"
  504. fi
  505. tar xzf $tmpdir/user_dir/$user_dir.tar.gz -C $HOMEDIR/$user
  506. if [ "$?" -ne 0 ]; then
  507. error="can't unpack $user_dir user dir contaner"
  508. echo "$error" |$SENDMAIL -s "$subj" $email $notify
  509. sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
  510. check_result "$E_PARSING" "$error"
  511. fi
  512. # Re-chowning files if uid differs
  513. if [ "$old_uid" -ne "$new_uid" ]; then
  514. find $HOMEDIR/$user/$user_dir -user $old_uid \
  515. -exec chown -h $user:$user {} \;
  516. fi
  517. done
  518. fi
  519. fi
  520. # Sending mail notification
  521. subj="$user → restore has been completed"
  522. cat $tmpdir/restore.log |$SENDMAIL -s "$subj" $email $notify
  523. # Deleting temporary data
  524. rm -rf $tmpdir
  525. # Cleaning restore queue
  526. sed -i "/v-restore-user $user /d" $VESTA/data/queue/backup.pipe
  527. #----------------------------------------------------------#
  528. # Vesta #
  529. #----------------------------------------------------------#
  530. # Update user counters
  531. $BIN/v-update-user-counters $user
  532. $BIN/v-update-user-counters admin
  533. $BIN/v-update-sys-ip-counters
  534. # Logging
  535. log_event "$OK" "$ARGUMENTS"
  536. exit