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 }