-
-
Save zxkane/b55033bd519334d57c13 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# defaults for VME wechat server | |
# pulled in from the init script; makes things easier. | |
NAME=vme-wechat | |
# location of java | |
JAVA=/home/jenkins/jenkins-home/tools/hudson.model.JDK/java-1.8/bin/java | |
# arguments to pass to java | |
JAVA_ARGS="-Dspring.profiles.active=svt" # specify active profile for spring boot | |
PIDFILE=$BASEDIR/var/run/$NAME/$NAME.pid | |
# user and group to be invoked as (default to jenkins) | |
VME_USER=jenkins | |
VME_GROUP=jenkins | |
# location of the vme standalone jar file | |
VME_JAR=$ARCHIVE_DIR/vme-wechat-1.0.0.jar | |
# set this to false if you don't want vme to run by itself | |
# in this set up, you are expected to provide a servlet container | |
# to host vme. | |
RUN_STANDALONE=true | |
# log location. this may be a syslog facility.priority | |
VME_LOG=$BASEDIR/var/log/$NAME/$NAME.log | |
# port for HTTP connector (default 8080; disable with -1) | |
HTTP_PORT=8000 | |
VME_ARGS= | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# debian-compatible vme startup script which modified from jenkins-ci. | |
# Amelia A Lewis <[email protected]> | |
# Kane Zhu <[email protected]> | |
# | |
### BEGIN INIT INFO | |
# Provides: vme | |
# Required-Start: $remote_fs $syslog $network | |
# Required-Stop: $remote_fs $syslog $network | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Start vme-wechat by CI | |
# Description: Controls VME wechat Server | |
### END INIT INFO | |
PATH=/bin:/usr/bin:/sbin:/usr/sbin | |
BASEDIR=`dirname $0 | sed -e 's=/\.$==g'` | |
if [ "$BASEDIR" = "." ]; then | |
BASEDIR="$PWD" | |
else | |
BASEDIR=`echo $BASEDIR | sed -e "s=^\.=$PWD/.=g"` | |
fi | |
DESC="VME Wechat Server" | |
NAME=vme-wechat | |
SCRIPTNAME=$BASEDIR/etc/init.d/$NAME | |
[ -r $BASEDIR/etc/default/$NAME ] && . $BASEDIR/etc/default/$NAME | |
[ -r $BASEDIR/default ] && . $BASEDIR/default | |
DAEMON=/usr/bin/daemon | |
DAEMON_ARGS="-D $BASEDIR --name=$NAME --inherit --output=$VME_LOG --pidfile=$PIDFILE" | |
if [ -n "$UMASK" ]; then | |
DAEMON_ARGS="$DAEMON_ARGS --umask=$UMASK" | |
fi | |
SU=/bin/su | |
# Exit if the package is not installed | |
if [ ! -x "$DAEMON" ]; then | |
echo "daemon package not installed" >&2 | |
exit 1 | |
fi | |
# Exit if not supposed to run standalone | |
if [ "$RUN_STANDALONE" = "false" ]; then | |
echo "Not configured to run standalone" >&2 | |
exit 1 | |
fi | |
# load environments | |
if [ -r /etc/default/locale ]; then | |
. /etc/default/locale | |
export LANG LANGUAGE | |
elif [ -r /etc/environment ]; then | |
. /etc/environment | |
export LANG LANGUAGE | |
fi | |
# Load the VERBOSE setting and other rcS variables | |
. /lib/init/vars.sh | |
# Define LSB log_* functions. | |
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. | |
. /lib/lsb/init-functions | |
check_tcp_port() { | |
local service=$1 | |
local assigned=$2 | |
local default=$3 | |
if [ -n "$assigned" ]; then | |
port=$assigned | |
else | |
port=$default | |
fi | |
count=`netstat --listen --numeric-ports | grep \:$port[[:space:]] | grep -c . ` | |
if [ $count -ne 0 ]; then | |
echo "The selected $service port ($port) seems to be in use by another program " | |
echo "Please select another port to use for $NAME" | |
return 1 | |
fi | |
} | |
# | |
# Function that starts the daemon/service | |
# | |
do_start() | |
{ | |
# the default location is /var/run/vme-wechat/vme-wechat.pid but the parent directory needs to be created | |
mkdir `dirname $PIDFILE` > /dev/null 2>&1 || true | |
chown $VME_USER `dirname $PIDFILE` | |
# Return | |
# 0 if daemon has been started | |
# 1 if daemon was already running | |
# 2 if daemon could not be started | |
$DAEMON $DAEMON_ARGS --running && return 1 | |
# Verify that the vme-wechat port is not already in use, tomcat does not exit | |
# even for BindException | |
check_tcp_port "http" "$HTTP_PORT" "8000" || return 2 | |
# notify of explicit umask | |
if [ -n "$UMASK" ]; then | |
[ "$VERBOSE" != no ] && echo Setting umask to $UMASK | |
fi | |
# --user in daemon doesn't prepare environment variables like HOME, USER, LOGNAME or USERNAME, | |
# so we let su do so for us now | |
/bin/bash -c "$DAEMON $DAEMON_ARGS -- $JAVA $JAVA_ARGS -jar $VME_JAR $VME_ARGS" || return 2 | |
} | |
# | |
# Verify that all vme-wechat processes have been shutdown | |
# and if not, then do killall for them | |
# | |
get_running() | |
{ | |
return `ps -U $VME_USER --no-headers -f | egrep -e '(java|daemon)' | grep -c . ` | |
} | |
force_stop() | |
{ | |
get_running | |
if [ $? -ne 0 ]; then | |
killall -u $VME_USER daemon || return 3 | |
# kill vme-wechat java only | |
kill `ps -eo pid,args --cols=10000 | awk '/$JAVA_ARGS/ && $1 != PROCINFO["pid"] { print $1 }'` | |
fi | |
} | |
# Get the status of the daemon process | |
get_daemon_status() | |
{ | |
$DAEMON $DAEMON_ARGS --running || return 1 | |
} | |
# | |
# Function that stops the daemon/service | |
# | |
do_stop() | |
{ | |
# Return | |
# 0 if daemon has been stopped | |
# 1 if daemon was already stopped | |
# 2 if daemon could not be stopped | |
# other if a failure occurred | |
get_daemon_status | |
case "$?" in | |
0) | |
$DAEMON $DAEMON_ARGS --stop || return 2 | |
# wait for the process to really terminate | |
for n in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do | |
sleep 1 | |
$DAEMON $DAEMON_ARGS --running || break | |
done | |
if get_daemon_status; then | |
force_stop || return 3 | |
fi | |
;; | |
*) | |
force_stop || return 3 | |
;; | |
esac | |
# Many daemons don't delete their pidfiles when they exit. | |
rm -f $PIDFILE | |
return 0 | |
} | |
case "$1" in | |
start) | |
log_daemon_msg "Starting $DESC" "$NAME" | |
do_start | |
case "$?" in | |
0|1) log_end_msg 0 ;; | |
2) log_end_msg 1 ;; | |
esac | |
;; | |
stop) | |
log_daemon_msg "Stopping $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) log_end_msg 0 ;; | |
2) log_end_msg 1 ;; | |
esac | |
;; | |
restart|force-reload) | |
# | |
# If the "reload" option is implemented then remove the | |
# 'force-reload' alias | |
# | |
log_daemon_msg "Restarting $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) | |
do_start | |
case "$?" in | |
0) log_end_msg 0 ;; | |
1) log_end_msg 1 ;; # Old process is still running | |
*) log_end_msg 1 ;; # Failed to start | |
esac | |
;; | |
*) | |
# Failed to stop | |
log_end_msg 1 | |
;; | |
esac | |
;; | |
status) | |
get_daemon_status | |
case "$?" in | |
0) | |
echo "$DESC is running with the pid `cat $PIDFILE`" | |
rc=0 | |
;; | |
*) | |
get_running | |
procs=$? | |
if [ $procs -eq 0 ]; then | |
echo -n "$DESC is not running" | |
if [ -f $PIDFILE ]; then | |
echo ", but the pidfile ($PIDFILE) still exists" | |
rc=1 | |
else | |
echo | |
rc=3 | |
fi | |
else | |
echo "$procs instances of vme-wechat are running at the moment" | |
echo "but the pidfile $PIDFILE is missing" | |
rc=0 | |
fi | |
exit $rc | |
;; | |
esac | |
;; | |
*) | |
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 | |
exit 3 | |
;; | |
esac | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment