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