2021-12-03 07:35:16 +00:00
#!/bin/bash
### BEGIN INIT INFO
# Provides: seafile
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs
# Default-Start: 1 2 3 4 5
# Default-Stop:
# Short-Description: Starts Seafile Server
# Description: starts Seafile Server
### END INIT INFO
echo ""
SCRIPT = $( readlink -f " $0 " )
INSTALLPATH = $( dirname " ${ SCRIPT } " )
TOPDIR = $( dirname " ${ INSTALLPATH } " )
default_ccnet_conf_dir = ${ TOPDIR } /ccnet
default_seafile_data_dir = ${ TOPDIR } /seafile-data
central_config_dir = ${ TOPDIR } /conf
2021-12-04 02:45:09 +00:00
pro_pylibs_dir = ${ INSTALLPATH } /pro/python
seafesdir = $pro_pylibs_dir /seafes
2024-11-19 10:05:17 +00:00
seahubdir = ${ INSTALLPATH } /seahub
2024-11-09 04:39:13 +00:00
seafile_rpc_pipe_path = ${ INSTALLPATH } /runtime
2024-11-20 09:42:15 +00:00
IS_PRO_SEAFEVENTS = ` awk '/is_pro/{getline;print $2;exit}' ${ pro_pylibs_dir } /seafevents/seafevents_api.py`
2021-12-03 07:35:16 +00:00
export PATH = ${ INSTALLPATH } /seafile/bin:$PATH
export ORIG_LD_LIBRARY_PATH = ${ LD_LIBRARY_PATH }
export SEAFILE_LD_LIBRARY_PATH = ${ INSTALLPATH } /seafile/lib/:${ INSTALLPATH } /seafile/lib64:${ LD_LIBRARY_PATH }
2024-11-09 04:39:13 +00:00
export SEAFILE_CENTRAL_CONF_DIR = ${ central_config_dir }
export CCNET_CONF_DIR = ${ default_ccnet_conf_dir }
export SEAFILE_CONF_DIR = ${ default_seafile_data_dir }
export SEAFILE_RPC_PIPE_PATH = ${ seafile_rpc_pipe_path }
2024-11-19 10:05:17 +00:00
export SEAHUB_DIR = $seahubdir
export SEAFDAV_CONF = ${ central_config_dir } /seafdav.conf
2021-12-03 07:35:16 +00:00
script_name = $0
function usage ( ) {
echo "usage : "
echo " $( basename ${ script_name } ) { start | stop | restart } "
echo ""
}
# check args
if [ [ $# != 1 || ( " $1 " != "start" && " $1 " != "stop" && " $1 " != "restart" ) ] ] ; then
usage;
exit 1;
fi
function validate_running_user ( ) {
real_data_dir = ` readlink -f ${ default_seafile_data_dir } `
running_user = ` id -un`
data_dir_owner = ` stat -c %U ${ real_data_dir } `
if [ [ " ${ running_user } " != " ${ data_dir_owner } " ] ] ; then
echo " Error: the user running the script (\" ${ running_user } \") is not the owner of \" ${ real_data_dir } \" folder, you should use the user \" ${ data_dir_owner } \" to run the script. "
exit -1;
fi
}
2024-09-03 10:44:39 +00:00
export PYTHONPATH = ${ INSTALLPATH } /seafile/lib/python3/site-packages:${ INSTALLPATH } /seafile/lib64/python3/site-packages:${ INSTALLPATH } /seahub/thirdpart:${ central_config_dir } :$PYTHONPATH
2021-12-04 02:45:09 +00:00
if [ [ -d ${ INSTALLPATH } /pro ] ] ; then
export PYTHONPATH = $PYTHONPATH :$pro_pylibs_dir
export SEAFES_DIR = $seafesdir
fi
2024-11-09 04:39:13 +00:00
function set_env_config ( ) {
2024-09-03 10:44:39 +00:00
if [ -z " ${ JWT_PRIVATE_KEY } " ] ; then
2024-09-14 09:01:17 +00:00
if [ ! -e " ${ central_config_dir } /.env " ] ; then
echo "Error: .env file not found."
echo "Please follow the upgrade manual to set the .env file."
echo ""
exit -1;
fi
# load the .env file
source " ${ central_config_dir } /.env "
if [ -z " ${ JWT_PRIVATE_KEY } " ] ; then
echo "Error: JWT_PRIVATE_KEY not found in .env file."
echo "Please follow the upgrade manual to set the .env file."
echo ""
exit -1;
fi
2024-10-30 11:09:34 +00:00
export JWT_PRIVATE_KEY = ${ JWT_PRIVATE_KEY }
2024-11-21 08:31:22 +00:00
export SEAFILE_MYSQL_DB_CCNET_DB_NAME = ${ SEAFILE_MYSQL_DB_CCNET_DB_NAME :- ccnet_db }
export SEAFILE_MYSQL_DB_SEAFILE_DB_NAME = ${ SEAFILE_MYSQL_DB_SEAFILE_DB_NAME :- seafile_db }
export SEAFILE_MYSQL_DB_SEAHUB_DB_NAME = ${ SEAFILE_MYSQL_DB_SEAHUB_DB_NAME :- seahub_db }
2024-11-09 04:39:13 +00:00
export SEAFILE_SERVER_PROTOCOL = ${ SEAFILE_SERVER_PROTOCOL }
export SEAFILE_SERVER_HOSTNAME = ${ SEAFILE_SERVER_HOSTNAME }
2024-11-21 08:31:22 +00:00
export SITE_ROOT = ${ SITE_ROOT :- / }
2024-11-09 04:39:13 +00:00
export ENABLE_FILESERVER = ${ ENABLE_FILESERVER }
export ENABLE_SEAFDAV = ${ ENABLE_SEAFDAV }
2024-09-03 10:44:39 +00:00
fi
}
2021-12-03 07:35:16 +00:00
function validate_central_conf_dir ( ) {
if [ [ ! -d ${ central_config_dir } ] ] ; then
echo "Error: there is no conf/ directory."
echo "Have you run setup-seafile.sh before this?"
echo ""
exit -1;
fi
}
function validate_seafile_data_dir ( ) {
if [ [ ! -d ${ default_seafile_data_dir } ] ] ; then
echo "Error: there is no seafile server data directory."
echo "Have you run setup-seafile.sh before this?"
echo ""
exit 1;
fi
}
function check_component_running( ) {
name = $1
cmd = $2
if pid = $( pgrep -f " $cmd " 2>/dev/null) ; then
echo " [ $name ] is running, pid $pid . You can stop it by: "
echo
echo " kill $pid "
echo
echo "Stop it and try again."
echo
exit
fi
}
function validate_already_running ( ) {
2024-11-09 04:39:13 +00:00
if pid = $( pgrep -f "seafile-monitor.sh" 2>/dev/null) ; then
echo " Seafile monitor is already running, pid $pid "
2021-12-03 07:35:16 +00:00
echo
exit 1;
fi
2024-11-09 04:39:13 +00:00
check_component_running "seaf-server" "seaf-server"
check_component_running "fileserver" "fileserver"
2021-12-03 07:35:16 +00:00
check_component_running "seafdav" "wsgidav.server.server_cli"
2021-12-04 02:45:09 +00:00
check_component_running "seafevents" " seafevents.main --config-file ${ central_config_dir } "
}
2021-12-03 07:35:16 +00:00
function start_seafile_server ( ) {
2024-11-09 04:39:13 +00:00
set_env_config;
2021-12-03 07:35:16 +00:00
validate_already_running;
validate_central_conf_dir;
validate_seafile_data_dir;
validate_running_user;
echo "Starting seafile server, please wait ..."
mkdir -p $TOPDIR /logs
2024-11-12 03:46:14 +00:00
mkdir -p $TOPDIR /pids
2021-12-04 02:45:09 +00:00
2024-11-09 04:39:13 +00:00
# seaf-server
2024-11-20 09:42:15 +00:00
if [ [ $IS_PRO_SEAFEVENTS = "True" ] ] ; then
LD_LIBRARY_PATH = ${ SEAFILE_LD_LIBRARY_PATH } ${ INSTALLPATH } /seafile/bin/seaf-server \
-F ${ SEAFILE_CENTRAL_CONF_DIR } \
-c ${ CCNET_CONF_DIR } \
-d ${ SEAFILE_CONF_DIR } \
-l ${ TOPDIR } /logs/seafile.log \
-P ${ TOPDIR } /pids/seaf-server.pid \
-p ${ SEAFILE_RPC_PIPE_PATH } \
-f -L ${ TOPDIR } &
else
LD_LIBRARY_PATH = ${ SEAFILE_LD_LIBRARY_PATH } ${ INSTALLPATH } /seafile/bin/seaf-server \
-F ${ SEAFILE_CENTRAL_CONF_DIR } \
-c ${ CCNET_CONF_DIR } \
-d ${ SEAFILE_CONF_DIR } \
-l ${ TOPDIR } /logs/seafile.log \
-P ${ TOPDIR } /pids/seaf-server.pid \
-p ${ SEAFILE_RPC_PIPE_PATH } \
-f &
fi
2021-12-03 07:35:16 +00:00
2024-11-09 04:39:13 +00:00
sleep 2
# seafile-monitor
2024-12-25 14:15:32 +00:00
if [ [ $SEAFILE_LOG_TO_STDOUT = "true" ] ] ; then
${ INSTALLPATH } /seafile-monitor.sh &
else
${ INSTALLPATH } /seafile-monitor.sh & >> ${ TOPDIR } /logs/seafile-monitor.log &
fi
2024-11-09 04:39:13 +00:00
sleep 1
2021-12-03 07:35:16 +00:00
# check if seafile server started successfully
2024-11-09 04:39:13 +00:00
if ! pgrep -f "seaf-server" 2>/dev/null 1>& 2; then
2021-12-03 07:35:16 +00:00
echo "Failed to start seafile server"
2024-11-09 04:39:13 +00:00
kill_all
2021-12-03 07:35:16 +00:00
exit 1;
fi
echo "Seafile server started"
echo
}
2021-12-04 02:45:09 +00:00
function kill_all ( ) {
2024-11-09 04:39:13 +00:00
pkill -f "seaf-server"
pkill -f "fileserver"
2021-12-04 02:45:09 +00:00
pkill -f "seafevents.main"
2024-11-09 04:39:13 +00:00
pkill -f "wsgidav.server.server_cli"
pkill -f "seafile-monitor.sh"
2021-12-04 02:45:09 +00:00
}
2021-12-03 07:35:16 +00:00
function stop_seafile_server ( ) {
2024-11-09 04:39:13 +00:00
if ! pgrep -f "seafile-monitor.sh" 2>/dev/null 1>& 2; then
2021-12-03 07:35:16 +00:00
echo "seafile server not running yet"
2021-12-04 02:45:09 +00:00
kill_all
return 1
2021-12-03 07:35:16 +00:00
fi
echo "Stopping seafile server ..."
2021-12-04 02:45:09 +00:00
kill_all
2021-12-03 07:35:16 +00:00
return 0
}
function restart_seafile_server ( ) {
stop_seafile_server;
2021-12-04 02:45:09 +00:00
sleep 5
2021-12-03 07:35:16 +00:00
start_seafile_server;
}
case $1 in
"start" )
start_seafile_server;
; ;
"stop" )
stop_seafile_server;
; ;
"restart" )
restart_seafile_server;
esac
echo "Done."