#!/bin/bash /etc/rc.common
|
|
|
|
START=98
|
|
APP=seafile
|
|
EXTRA_HELP=" setup Runs the setup script
|
|
create_admin Creates the administrative login
|
|
reset_admin Alias to create_admin"
|
|
EXTRA_COMMANDS="setup create_admin reset_admin"
|
|
|
|
TOPDIR=/usr/share/seafile
|
|
default_ccnet_conf_dir=${TOPDIR}/ccnet
|
|
central_config_dir=${TOPDIR}/conf
|
|
seaf_controller=/usr/bin/seafile-controller
|
|
|
|
function validate_ccnet_conf_dir () {
|
|
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
|
|
echo "Error: there is no ccnet config directory."
|
|
echo "Have you run \"/etc/init.d/seafile setup\"?"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function validate_central_conf_dir () {
|
|
if [[ ! -d ${central_config_dir} ]]; then
|
|
echo "Error: there is no conf/ directory."
|
|
echo "Have you run \"/etc/init.d/seafile setup\"?"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function read_seafile_data_dir () {
|
|
seafile_ini=${default_ccnet_conf_dir}/seafile.ini
|
|
if [[ ! -f ${seafile_ini} ]]; then
|
|
echo "Error: ${seafile_ini} not found."
|
|
exit 1
|
|
fi
|
|
seafile_data_dir=$(cat "${seafile_ini}")
|
|
if [[ ! -d ${seafile_data_dir} ]]; then
|
|
echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
|
|
echo "Please check it first, or create this directory yourself."
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function test_config() {
|
|
if ! ${seaf_controller} --test \
|
|
-c "${default_ccnet_conf_dir}" \
|
|
-d "${seafile_data_dir}" \
|
|
-F "${central_config_dir}" ; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function check_component_running() {
|
|
name=$1
|
|
cmd=$2
|
|
if pid=$(pgrep -f "$cmd" 2>/dev/null); then
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function validate_already_running () {
|
|
check_component_running "seafile-controller" "seafile-controller -F ${central_config_dir}" || return 1
|
|
check_component_running "ccnet-server" "ccnet-server -F ${central_config_dir}" || return 1
|
|
check_component_running "seaf-server" "seaf-server -F ${central_config_dir}" || return 1
|
|
check_component_running "fileserver" "fileserver -F ${central_config_dir}" || return 1
|
|
check_component_running "seafdav" "wsgidav.server.run_server" || return 1
|
|
}
|
|
|
|
function start_seafile_server () {
|
|
if ! validate_already_running; then
|
|
if [[ "$name" == "seafile-controller" ]]; then
|
|
echo "Seafile already running."
|
|
else
|
|
echo "Error: component [$name] is already running. Please try stopping it manually by running \"kill $pid\"."
|
|
echo "To force killing the process, use \"kill -9 $pid\"."
|
|
fi
|
|
exit 1
|
|
fi
|
|
validate_central_conf_dir
|
|
validate_ccnet_conf_dir
|
|
read_seafile_data_dir
|
|
test_config
|
|
|
|
echo "Starting seafile server, please wait ..."
|
|
|
|
${seaf_controller} \
|
|
-F "${central_config_dir}" \
|
|
-c "${default_ccnet_conf_dir}" \
|
|
-d "${seafile_data_dir}"
|
|
|
|
sleep 3
|
|
|
|
# check if seafile server started successfully
|
|
if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
|
|
echo "Failed to start seafile server"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Seafile server started"
|
|
echo
|
|
}
|
|
|
|
function stop_seafile_server () {
|
|
if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
|
|
echo "Seafile server not running"
|
|
else
|
|
echo "Stopping seafile server ..."
|
|
pkill -SIGTERM -f "seafile-controller -F ${central_config_dir}"
|
|
pkill -f "ccnet-server -F ${central_config_dir}"
|
|
pkill -f "seaf-server -F ${central_config_dir}"
|
|
pkill -f "fileserver -F ${central_config_dir}"
|
|
pkill -f "soffice.*--invisible --nocrashreport"
|
|
pkill -f "wsgidav.server.run_server"
|
|
retry=1
|
|
while ! validate_already_running && [ $retry -lt 60 ]; do sleep 1; ((retry++)); done
|
|
if ! validate_already_running; then
|
|
echo "Error: [$name] component is still running. Please try stopping it manually by running \"kill $pid\"."
|
|
echo "To force killing the process, use \"kill -9 $pid\"."
|
|
fi
|
|
|
|
fi
|
|
}
|
|
|
|
function restart_seafile_server () {
|
|
stop_seafile_server
|
|
start_seafile_server
|
|
}
|
|
|
|
function start() {
|
|
start_seafile_server
|
|
}
|
|
|
|
function stop() {
|
|
stop_seafile_server
|
|
}
|
|
|
|
function restart() {
|
|
restart_seafile_server
|
|
}
|
|
|
|
function setup() {
|
|
cd "$TOPDIR" && \
|
|
/usr/bin/seafile-admin setup
|
|
}
|
|
|
|
function create_admin() {
|
|
cd "$TOPDIR" && \
|
|
/usr/bin/seafile-admin create-admin
|
|
}
|
|
|
|
function reset_admin() {
|
|
create_admin
|
|
}
|