189 lines
4.4 KiB
Bash
Executable File
189 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
LATEST=$SEAF/seafile-server-latest
|
|
PIDS=$SEAF/pids
|
|
PIDFILES=("$PIDS" "$LATEST/runtime" "/var/run/nginx")
|
|
COMMANDS=("seaf-server $LATEST/seafile.sh start" "seahub $LATEST/seahub.sh ${SEAF_HUB_MODE:-start} 8000" "nginx /usr/sbin/nginx")
|
|
|
|
function stop {
|
|
#Kill when hitting CTRL+C repeatedly
|
|
trap stop_kill SIGTERM
|
|
$0 stop
|
|
}
|
|
function stop_kill {
|
|
$0 kill
|
|
}
|
|
function ext_url {
|
|
echo "${SEAF_URL:-http://$(hostname)}/seafhttp"
|
|
}
|
|
function patch_seahub_conf {
|
|
KEY="FILE_SERVER_ROOT"
|
|
ENTRY="$KEY = '$(ext_url)'"
|
|
CONF="$SEAF/conf/seahub_settings.py"
|
|
grep "$KEY" -i "$CONF"
|
|
if [ $? -eq 1 ]; then
|
|
echo "Patched seahub_settings.py: set $ENTRY"
|
|
echo -e "\n$ENTRY" >> "$CONF"
|
|
fi
|
|
}
|
|
function last_update {
|
|
if [ -e "$LATEST/install_date" ]; then
|
|
date -d $(cat "$LATEST/install_date") "+%s"
|
|
else
|
|
echo 0
|
|
fi
|
|
}
|
|
|
|
function pid {
|
|
for LOC in ${PIDFILES[@]}; do
|
|
if [ -e "$LOC/$1.pid" ]; then
|
|
cat "$LOC/$1.pid"
|
|
return 0
|
|
fi
|
|
done
|
|
pgrep -f "/$1"
|
|
}
|
|
|
|
case "$1" in
|
|
run)
|
|
if [ ! -e "$LATEST" ]; then
|
|
(>&2 echo This appears to be the fist run, installing..)
|
|
mkdir -p $SEAF/conf
|
|
cp /etc/seafile/* $SEAF/conf/* -rf
|
|
$0 run-upgrade
|
|
exit $?
|
|
else
|
|
patch_seahub_conf
|
|
for CMD in "${COMMANDS[@]}"; do
|
|
INFO=($CMD)
|
|
$0 manage-component "${INFO[0]}" start "${INFO[1]}" "${INFO[@]:2}"
|
|
done
|
|
wait
|
|
fi
|
|
trap stop SIGINT SIGQUIT SIGTERM
|
|
LAST_UPGRADE=$(last_update)
|
|
UPGRADE=0
|
|
while eval "$0 status > /dev/null"; do
|
|
sleep 10;
|
|
SINCE_UPGRADE=$(((($(date "+%s") - $LAST_UPGRADE))/(60*60*24)))
|
|
if [ $LAST_UPGRADE -gt 0 ] && [ "0$SEAF_UPGRADE_INTERVAL" -gt 0 ] && [ $SINCE_UPGRADE -gt "0$SEAF_UPGRADE_INTERVAL" ]; then
|
|
echo "It's been $SINCE_UPGRADE days since the last Upgrade\nSTOPPING TO PERFORM UPGRADE NOW\nSet SEAF_UPGRADE_INTERVAL=0 disable automatic updates"
|
|
UPGRADE=1
|
|
$0 stop
|
|
fi
|
|
done
|
|
if [ $UPGRADE -eq 1 ]; then
|
|
$0 stop-upgrade-run
|
|
else
|
|
echo "Terminated"
|
|
fi
|
|
;;
|
|
run-upgrade)
|
|
$0 upgrade
|
|
RES=$?
|
|
if [ $RES -eq 1 ]; then
|
|
echo "Failed upgrade"
|
|
exit 1
|
|
fi
|
|
if [ $RES -eq 127 ]; then
|
|
#No upgrade
|
|
true
|
|
fi
|
|
if [ $RES -eq 126 ] && [ ! -e "$LATEST/install_date" ]; then
|
|
date +%Y-%m-%d > "$LATEST/install_date"
|
|
fi
|
|
$0 run
|
|
;;
|
|
stop)
|
|
PIDS=""
|
|
for CMD in seafile-controller ccnet seafdav "${COMMANDS[@]}" seafile-controller ccnet; do
|
|
$0 manage-component $(echo $CMD | cut -d' ' -f1) stop &
|
|
PIDS="$PIDS $!"
|
|
done
|
|
wait $PIDS
|
|
;;
|
|
kill)
|
|
export SEAF_STOP_TRIES=0
|
|
$0 stop
|
|
;;
|
|
stop-upgrade-run)
|
|
$0 stop && $0 upgrade && $0 run
|
|
;;
|
|
upgrade)
|
|
/usr/local/sbin/upgrade main
|
|
kill -SIGHUP $(pgrep -o nginx) #Reload nginx
|
|
;;
|
|
maintanance)
|
|
$0 stop
|
|
$LATEST/seaf-gc.sh
|
|
$0 start
|
|
;;
|
|
setup)
|
|
INSTALLDIR=$2
|
|
SETUP_ARGS="auto -n ${SEAF_NAME:-$(hostname)} -i $(hostname) -p 8082"
|
|
if [ ! -z "$SEAF_MYSQL" ]; then
|
|
$INSTALLDIR/setup-seafile-mysql.sh $SETUP_ARGS -o $SEAF_MYSQL_HOST -t ${SEAF_MYSQL_PORT:-3306} -u "${SEAF_MYSQL_USER:-root}" \
|
|
-w "$SEAF_MYSQL_PASS" -r "${SEAF_MYSQL_ROOT_PASS:-$SEAF_MYSQL_PASS}" -c ${SEAF_MYSQL_DB_CCNET:-ccnet} -s ${SEAF_MYSQL_DB_SEAF:-seafile} \
|
|
-b ${SEAF_MYSQL_DB_HUB:-seahub}
|
|
else
|
|
$INSTALLDIR/setup-seafile.sh $SETUP_ARGS
|
|
fi
|
|
;;
|
|
status)
|
|
RUNNING=1
|
|
for CMD in seafile-controller ccnet "${COMMANDS[@]}"; do
|
|
SERVICE="$(echo $CMD | cut -d' ' -f1)"
|
|
echo -n "$SERVICE: "
|
|
$0 manage-component $SERVICE status
|
|
[ $? -eq 0 ] || [ $RUNNING -eq 0 ]
|
|
RUNNING=$?
|
|
done
|
|
[ $RUNNING -eq 0 ]
|
|
;;
|
|
manage-component)
|
|
mkdir -p /var/run/seafile
|
|
NAME="$2"
|
|
PID=$(pid $NAME)
|
|
case "$3" in
|
|
start)
|
|
CMD="$4"
|
|
ARGS="$5"
|
|
eval "$CMD $ARGS"
|
|
sleep 1
|
|
( ! eval "$0 $1 $NAME status" ) && ((>&2 echo Failed to start $NAME); exit 1)
|
|
;;
|
|
status)
|
|
(kill -0 $PID 2> /dev/null && echo Running) || (echo Stopped && exit 1)
|
|
;;
|
|
stop)
|
|
QUERY="$0 $1 $NAME status > /dev/null"
|
|
if eval "$QUERY"; then
|
|
kill $PID
|
|
TRIES=${SEAF_STOP_TRIES:-30}
|
|
while eval "$QUERY"; do
|
|
TRIES=$((TRIES - 1))
|
|
if [ $TRIES -lt 1 ]; then
|
|
(>&2 echo Failed to stop gracefully $NAME)
|
|
kill -9 $PID
|
|
exit 1
|
|
else
|
|
kill $PID
|
|
[ $? -eq 1 ] && break
|
|
fi
|
|
sleep 1
|
|
done
|
|
(>&2 echo $NAME has been stopped)
|
|
else
|
|
(>&2 echo $NAME is not running)
|
|
fi
|
|
;;
|
|
*)
|
|
echo "You're doing wrong pal"
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
(>&2 echo Unknown option $1 options include: run, run-upgrade, upgrade, stop, stop-upgrade)
|
|
;;
|
|
esac
|