#!/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 }