| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | #!/bin/sh### Custom user script for gogs### First param is:###  "start" (call at start entware),###  "stop" (call before stop entware),###### Note the additional requirements for gogs on ddwrt: shadow user, group, sudo, daemonize# pid so we know we're runningPIDFILE="/opt/var/run/gogs.pid"# will need shadow users and groups, sorry - this adds complexity.USER="gogs"# go pathsGOROOT="/opt/bin/go"GOPATH="/opt/go"# gogs binary locationGOGSBIN="$GOPATH/src/github.com/gogs/gogs/gogs"# in case you need to see logs for this daemonized gogDAEMONIZE_LOG="/tmp/gogs.daemon.log"# SQL can start up slower than normal on DDWRT, use this string to validate if it's up (/opt/bin/netstat -ln |grep "THE STRING YOU SET FOR BELOW VARIABLE"SQL_STRING=" 127.0.0.1:3306 "# items for startPROC="gogs"DESC=$PROCPREARGS="/opt/bin/daemonize -v -o $DAEMONIZE_LOG -u $USER -c $GOPATH -p $PIDFILE -E GOROOT=\"$GOROOT\" -E GOPATH=\"$GOPATH\""ARGS="web"# legacy RC stuffENABLED=yes# from rc.funcansi_red="\033[1;31m";ansi_white="\033[1;37m";ansi_green="\033[1;32m";ansi_yellow="\033[1;33m";ansi_blue="\033[1;34m";ansi_bell="\007";ansi_blink="\033[5m";ansi_std="\033[m";ansi_rev="\033[7m";ansi_ul="\033[4m";start() {        # check if we have our user.        grep -q "^$USER" /etc/passwd || {             echo -e -n "$ansi_red User $user doesn't exist in /etc/passwd. Exiting.\n$ansi_std"             exit 1        }        if [ -f "$DAEMONIZE_LOG" ]; then rm $DAEMONIZE_LOG; fi        echo -e -n "$ansi_white Starting $DESC... $ansi_std"        export GOROOT=$GOROOT        export GOPATH=$GOPATH        export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/mmc/sbin:/mmc/bin:/mmc/usr/sbin:/mmc/usr/bin:/opt/sbin:/opt/bin:/opt/usr/sbin:/ opt/usr/bin:$GOROOT/bin:$GOPATH        # Wait for SQL        for n in `seq 10`;        do          /opt/bin/netstat -ln |grep -v proc |grep -q "$SQL_STRING" && $PREARGS $GOGSBIN $ARGS > /dev/null && break          sleep 1        done        COUNTER=0        LIMIT=10        while [ -z "`pidof $PROC`" -a "$COUNTER" -le "$LIMIT" ]; do                sleep 1;                COUNTER=`expr $COUNTER + 1`        done        if [ -z "`pidof $PROC`" ]        then                echo -e "            $ansi_red failed. $ansi_std"                logger "Failed to start $DESC from $CALLER."                return 255        else                echo -e "            $ansi_green done. $ansi_std"                logger "Started $DESC from $CALLER."                return 0        fi}stop() {        echo -e -n "$ansi_white Shutting down $PROC...\n $ansi_std"        killall $PROC 2>/dev/null        if [ -f "$PIDFILE" ]        then                rm "$PIDFILE"        fi        COUNTER=0        LIMIT=10        while [ -n "`pidof $PROC`" -a "$COUNTER" -le "$LIMIT" ]; do                sleep 1;                COUNTER=`expr $COUNTER + 1`        done}status() {    echo -e -n "$ansi_white Checking $DESC... \n"    if [ -n "`pidof $PROC`" ]    then        echo -e "            $ansi_green alive. $ansi_std";        return 0    else        echo -e "            $ansi_red dead. $ansi_std";        return 1    fi}die() {     echo -e -n "$ansi_white Killing $PROC... $ansi_std"     killall -9 $PROC 2>/dev/null}case "$1" instart)  start  ;;stop)  stop  ;;kill)  die  ;;status | check)  status  ;;restart)  stop  start  ;;*)   echo "Usage: $0 {start|stop|kill|restart}"   exit 1   ;;esac
 |