lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

seafile.init (4110B)


      1 #!/bin/bash /etc/rc.common
      2 
      3 START=98
      4 APP=seafile
      5 EXTRA_HELP="	setup	Runs the setup script
      6 	create_admin	Creates the administrative login
      7 	reset_admin	Alias to create_admin"
      8 EXTRA_COMMANDS="setup create_admin reset_admin"
      9 
     10 TOPDIR=/usr/share/seafile
     11 default_ccnet_conf_dir=${TOPDIR}/ccnet
     12 central_config_dir=${TOPDIR}/conf
     13 seaf_controller=/usr/bin/seafile-controller
     14 
     15 function validate_ccnet_conf_dir () {
     16 	if [[ ! -d ${default_ccnet_conf_dir} ]]; then
     17 		echo "Error: there is no ccnet config directory."
     18 		echo "Have you run \"/etc/init.d/seafile setup\"?"
     19 		echo ""
     20 		exit 1
     21 	fi
     22 }
     23 
     24 function validate_central_conf_dir () {
     25 	if [[ ! -d ${central_config_dir} ]]; then
     26 		echo "Error: there is no conf/ directory."
     27 		echo "Have you run \"/etc/init.d/seafile setup\"?"
     28 		echo ""
     29 		exit 1
     30 	fi
     31 }
     32 
     33 function read_seafile_data_dir () {
     34 	seafile_ini=${default_ccnet_conf_dir}/seafile.ini
     35 	if [[ ! -f ${seafile_ini} ]]; then
     36 		echo "Error: ${seafile_ini} not found."
     37 		exit 1
     38 	fi
     39 	seafile_data_dir=$(cat "${seafile_ini}")
     40 	if [[ ! -d ${seafile_data_dir} ]]; then
     41 		echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
     42 		echo "Please check it first, or create this directory yourself."
     43 		echo ""
     44 		exit 1
     45 	fi
     46 }
     47 
     48 function test_config() {
     49 	if ! ${seaf_controller} --test \
     50 		-c "${default_ccnet_conf_dir}" \
     51 		-d "${seafile_data_dir}" \
     52 		-F "${central_config_dir}" ; then
     53 		exit 1
     54 	fi
     55 }
     56 
     57 function check_component_running() {
     58 	name=$1
     59 	cmd=$2
     60 	if pid=$(pgrep -f "$cmd" 2>/dev/null); then
     61 		return 1
     62 	fi
     63 }
     64 
     65 function validate_already_running () {
     66 	check_component_running "seafile-controller" "seafile-controller -F ${central_config_dir}" || return 1
     67 	check_component_running "ccnet-server" "ccnet-server -F ${central_config_dir}" || return 1
     68 	check_component_running "seaf-server" "seaf-server -F ${central_config_dir}" || return 1
     69 	check_component_running "fileserver" "fileserver -F ${central_config_dir}" || return 1
     70 	check_component_running "seafdav" "wsgidav.server.run_server" || return 1
     71 }
     72 
     73 function start_seafile_server () {
     74 	if ! validate_already_running; then
     75 		if [[ "$name" == "seafile-controller" ]]; then
     76 			echo "Seafile already running."
     77 		else
     78 			echo "Error: component [$name] is already running. Please try stopping it manually by running \"kill $pid\"."
     79 			echo "To force killing the process, use \"kill -9 $pid\"."
     80 		fi
     81 		exit 1
     82 	fi
     83 	validate_central_conf_dir
     84 	validate_ccnet_conf_dir
     85 	read_seafile_data_dir
     86 	test_config
     87 
     88 	echo "Starting seafile server, please wait ..."
     89 
     90 	${seaf_controller} \
     91 		-F "${central_config_dir}" \
     92 		-c "${default_ccnet_conf_dir}" \
     93 		-d "${seafile_data_dir}"
     94 
     95 	sleep 3
     96 
     97 	# check if seafile server started successfully
     98 	if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
     99 		echo "Failed to start seafile server"
    100 		exit 1
    101 	fi
    102 
    103 	echo "Seafile server started"
    104 	echo
    105 }
    106 
    107 function stop_seafile_server () {
    108 	if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
    109 		echo "Seafile server not running"
    110 	else
    111 		echo "Stopping seafile server ..."
    112 		pkill -SIGTERM -f "seafile-controller -F ${central_config_dir}"
    113 		pkill -f "ccnet-server -F ${central_config_dir}"
    114 		pkill -f "seaf-server -F ${central_config_dir}"
    115 		pkill -f "fileserver -F ${central_config_dir}"
    116 		pkill -f "soffice.*--invisible --nocrashreport"
    117 		pkill -f  "wsgidav.server.run_server"
    118 		retry=1
    119 		while ! validate_already_running && [ $retry -lt 60 ]; do sleep 1; ((retry++)); done
    120 		if ! validate_already_running; then
    121 			echo "Error: [$name] component is still running. Please try stopping it manually by running \"kill $pid\"."
    122 			echo "To force killing the process, use \"kill -9 $pid\"."
    123 		fi
    124 
    125 	fi
    126 }
    127 
    128 function restart_seafile_server () {
    129 	stop_seafile_server
    130 	start_seafile_server
    131 }
    132 
    133 function start() {
    134 	start_seafile_server
    135 }
    136 
    137 function stop() {
    138 	stop_seafile_server
    139 }
    140 
    141 function restart() {
    142 	restart_seafile_server
    143 }
    144 
    145 function setup() {
    146 	cd "$TOPDIR" && \
    147 		/usr/bin/seafile-admin setup
    148 }
    149 
    150 function create_admin() {
    151 	cd "$TOPDIR" && \
    152 		/usr/bin/seafile-admin create-admin
    153 }
    154 
    155 function reset_admin() {
    156 	create_admin
    157 }