#!/bin/bash # release version version=4.0.3 CWD=$(cd $(dirname $0)/; pwd) cd $CWD usage() { echo $"Usage: $0 {start|stop|restart|status|build|build_local|pack} " exit 0 } start_all() { test -x n9e-server && start server test -x n9e-agentd && start agentd test -x n9e-prober && start prober } start() { mod=$1 if [ "x${mod}" = "x" ]; then usage return fi if [ "x${mod}" = "xall" ]; then start_all return fi binfile=n9e-${mod} if [ ! -f $binfile ]; then echo "file[$binfile] not found" exit 1 fi if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -gt 0 ]; then echo "${mod} already started" return fi mkdir -p logs/$mod nohup $CWD/$binfile &> logs/${mod}/stdout.log & for((i=1;i<=15;i++)); do if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -gt 0 ]; then echo "${mod} started" return fi sleep 0.2 done echo "cannot start ${mod}" exit 1 } stop_all() { test -x n9e-server && stop server test -x n9e-prober && stop prober test -x n9e-agentd && stop agentd } stop() { mod=$1 if [ "x${mod}" = "x" ]; then usage return fi if [ "x${mod}" = "xall" ]; then stop_all return fi binfile=n9e-${mod} if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -eq 0 ]; then echo "${mod} already stopped" return fi ps aux|grep -v grep|grep -v control|grep "$binfile"|awk '{print $2}'|xargs kill for((i=1;i<=15;i++)); do if [ $(ps aux|grep -v grep|grep -v control|grep "$binfile" -c) -eq 0 ]; then echo "${mod} stopped" return fi sleep 0.2 done echo "cannot stop $mod" exit 1 } restart() { mod=$1 if [ "x${mod}" = "x" ]; then usage return fi if [ "x${mod}" = "xall" ]; then stop_all start_all return fi stop $mod start $mod status } status() { ps aux|grep -v grep|grep "n9e" } build_one() { mod=$1 echo -n "building ${mod} ... " go build -ldflags "-X main.version=${version}" -o n9e-${mod} src/modules/${mod}/${mod}.go echo "done" } build_local_one() { mod=$1 echo -n "building ${mod} ... " go build -mod=vendor -ldflags "-X main.version=${version}" -o n9e-${mod} src/modules/${mod}/${mod}.go echo "done" } build() { export GO111MODULE=on mod=$1 if [ "x${mod}" = "x" ]; then build_one server build_one agentd build_one prober return fi build_one $mod } build_local() { export GO111MODULE=on mod=$1 if [ "x${mod}" = "x" ]; then build_local_one server build_local_one agentd build_local_one prober return fi build_local_one $mod } reload() { mod=$1 if [ "x${mod}" = "x" ]; then echo "arg: is necessary" return fi build_one $mod restart $mod } pack() { clock=$(date +%s) mkdir -p ~/n9e.bak.$clock if ls etc/*.local.yml &>/dev/null; then mv etc/*.local.yml ~/n9e.bak.$clock fi tar zcvf n9e-${version}.tar.gz script control sql etc n9e-* if ls ~/n9e.bak.$clock/*.local.yml &>/dev/null; then mv ~/n9e.bak.$clock/*.local.yml etc/ fi rm -rf ~/n9e.bak.$clock } exec() { params=${@:2} if [ ${#2} -gt 0 ]; then for mod in $params do mod=${mod#n9e-} $1 $mod if [ "x${mod}" = "xall" ]; then break fi done else echo "todo $1 at "$(date "+%Y-%m-%d %H:%M:%S") $1 echo "done $1 at "$(date "+%Y-%m-%d %H:%M:%S") fi } case "$1" in start) exec start ${@:2} ;; stop) exec stop ${@:2} ;; restart) exec restart ${@:2} ;; status) status ;; build) exec build ${@:2} ;; build_local) exec build_local ${@:2} ;; reload) exec reload ${@:2} ;; pack) exec pack ${@:2} ;; *) usage esac