| #!/bin/bash |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| # Shell script to start rsyncd on master Solr server |
| |
| orig_dir=$(pwd) |
| cd ${0%/*}/.. |
| solr_root=$(pwd) |
| cd ${orig_dir} |
| |
| unset data_dir solr_port rsyncd_port user rsyncd_bwlimit verbose debug |
| . ${solr_root}/bin/scripts-util |
| |
| # set up variables |
| prog=${0##*/} |
| log=${solr_root}/logs/rsyncd.log |
| |
| # define usage string |
| USAGE="\ |
| usage: $prog [-d dir] [-p portnum] [-u username] [-b kbps] [-v] [-V] |
| -d specify directory holding index data |
| -p specify rsyncd port number |
| -u specify user to sudo to before running script |
| -b specify a max transfer rate in kilobytes per second (defaults to 0 (no limit)) |
| -v increase verbosity |
| -V output debugging info |
| " |
| |
| # parse args |
| while getopts d:p:u:b:vV OPTION |
| do |
| case $OPTION in |
| d) |
| data_dir="$OPTARG" |
| ;; |
| p) |
| rsyncd_port="$OPTARG" |
| ;; |
| u) |
| user="$OPTARG" |
| ;; |
| b) |
| rsyncd_bwlimit="$OPTARG" |
| ;; |
| v) |
| verbose="v" |
| ;; |
| V) |
| debug="V" |
| ;; |
| *) |
| echo "$USAGE" |
| exit 1 |
| esac |
| done |
| |
| [[ -n $debug ]] && set -x |
| |
| fixUser "$@" |
| |
| # try to determine rsyncd port number from $confFile if not specified on |
| # command line, default to solr_port+10000 |
| if [[ -z ${rsyncd_port} ]] |
| then |
| if [[ "${solr_port}" ]] |
| then |
| rsyncd_port=`expr 10000 + ${solr_port}` |
| else |
| echo "rsyncd port number missing in $confFile or command line." |
| echo "$USAGE" |
| exit 1 |
| fi |
| fi |
| |
| # Set bwlimit to unlimited by default |
| if [[ -z ${rsyncd_bwlimit} ]] |
| then |
| rsyncd_bwlimit='0' |
| fi |
| |
| dataDir |
| |
| logMessage started by $oldwhoami |
| logMessage command: $0 $@ |
| |
| if [[ ! -f ${solr_root}/logs/rsyncd-enabled ]] |
| then |
| logMessage rsyncd disabled |
| exit 2 |
| fi |
| |
| if \ |
| rsync rsync://localhost:${rsyncd_port} >/dev/null 2>&1 |
| then |
| logMessage "rsyncd already running at port ${rsyncd_port}" |
| exit 1 |
| fi |
| |
| # create conf/rsyncd.conf on the fly, creating solrlogs directory if needed |
| if [[ ! -d ${solr_root}/conf ]] |
| then |
| mkdir ${solr_root}/conf |
| fi |
| cat <<EOF > ${solr_root}/conf/rsyncd.conf |
| #### rsyncd.conf file #### |
| |
| uid = $(whoami) |
| gid = $(whoami) |
| use chroot = no |
| list = no |
| pid file = ${solr_root}/logs/rsyncd.pid |
| log file = ${solr_root}/logs/rsyncd.log |
| [solr] |
| path = ${data_dir} |
| comment = Solr |
| EOF |
| |
| rsync --daemon --port=${rsyncd_port} --bwlimit=${rsyncd_bwlimit} --config=${solr_root}/conf/rsyncd.conf |
| |
| # first make sure rsyncd is accepting connections |
| i=1 |
| while \ |
| ! rsync rsync://localhost:${rsyncd_port} >/dev/null 2>&1 |
| do |
| if (( i++ > 15 )) |
| then |
| logMessage "rsyncd not accepting connections, exiting" >&2 |
| exit 2 |
| fi |
| sleep 1 |
| done |
| |
| logMessage rsyncd started with data_dir=${data_dir} and accepting requests |