在这个微服务盛行的时代,docker获得了巨大的成功,因为我们需要在一台服务器装上N个服务。

  本文不是想讨论如何使用docker,而是,在一台服务器安装了多个服务后,怎样启动方便的启动服务呢?

一、在tomcat的时代中,直接使用tomcat的启动停止命令,轻松搞定,(tomcat的启动脚本很有水平,感兴趣的点开'+'号查看源码学习下吧)

  1. #!/bin/sh
  2. # chkconfig:
  3. # description:tomcat service
  4.  
  5. JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
  6. CATALINA_PID=/opt/tomcat7/pid.log
  7. CATALINA_HOME=/opt/tomcat7
  8. # OS specific support. $var _must_ be set to either true or false.
  9. cygwin=false
  10. darwin=false
  11. os400=false
  12. case "`uname`" in
  13. CYGWIN*) cygwin=true;;
  14. Darwin*) darwin=true;;
  15. OS400*) os400=true;;
  16. esac
  17.  
  18. # resolve links - $ may be a softlink
  19. PRG="$0"
  20.  
  21. while [ -h "$PRG" ]; do
  22. ls=`ls -ld "$PRG"`
  23. link=`expr "$ls" : '.*-> \(.*\)$'`
  24. if expr "$link" : '/.*' > /dev/null; then
  25. PRG="$link"
  26. else
  27. PRG=`dirname "$PRG"`/"$link"
  28. fi
  29. done
  30.  
  31. # Get standard environment variables
  32. PRGDIR=`dirname "$PRG"`
  33.  
  34. # Only set CATALINA_HOME if not already set
  35. [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
  36.  
  37. # Copy CATALINA_BASE from CATALINA_HOME if not already set
  38. [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
  39.  
  40. # Ensure that any user defined CLASSPATH variables are not used on startup,
  41. # but allow them to be specified in setenv.sh, in rare case when it is needed.
  42. CLASSPATH=
  43.  
  44. if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  45. . "$CATALINA_BASE/bin/setenv.sh"
  46. elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  47. . "$CATALINA_HOME/bin/setenv.sh"
  48. fi
  49.  
  50. # For Cygwin, ensure paths are in UNIX format before anything is touched
  51. if $cygwin; then
  52. [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  53. [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
  54. [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
  55. [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
  56. [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
  57. fi
  58.  
  59. # For OS400
  60. if $os400; then
  61. # Set job priority to standard for interactive (interactive - ) by using
  62. # the interactive priority - , the helper threads that respond to requests
  63. # will be running at the same priority as interactive jobs.
  64. COMMAND='chgjob job('$JOBNAME') runpty(6)'
  65. system $COMMAND
  66.  
  67. # Enable multi threading
  68. export QIBM_MULTI_THREADED=Y
  69. fi
  70.  
  71. # Get standard Java environment variables
  72. if $os400; then
  73. # -r will Only work on the os400 if the files are:
  74. # . owned by the user
  75. # . owned by the PRIMARY group of the user
  76. # this will not work if the user belongs in secondary groups
  77. . "$CATALINA_HOME"/bin/setclasspath.sh
  78. else
  79. if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
  80. . "$CATALINA_HOME"/bin/setclasspath.sh
  81. else
  82. echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
  83. echo "This file is needed to run this program"
  84. exit
  85. fi
  86. fi
  87.  
  88. # Add on extra jar files to CLASSPATH
  89. if [ ! -z "$CLASSPATH" ] ; then
  90. CLASSPATH="$CLASSPATH":
  91. fi
  92. CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar
  93.  
  94. if [ -z "$CATALINA_OUT" ] ; then
  95. CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
  96. fi
  97.  
  98. if [ -z "$CATALINA_TMPDIR" ] ; then
  99. # Define the java.io.tmpdir to use for Catalina
  100. CATALINA_TMPDIR="$CATALINA_BASE"/temp
  101. fi
  102.  
  103. # Add tomcat-juli.jar to classpath
  104. # tomcat-juli.jar can be over-ridden per instance
  105. if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
  106. CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar
  107. else
  108. CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar
  109. fi
  110.  
  111. # Bugzilla : When no TTY is available, don't output to console
  112. have_tty=
  113. if [ "`tty`" != "not a tty" ]; then
  114. have_tty=
  115. fi
  116.  
  117. # For Cygwin, switch paths to Windows format before running java
  118. if $cygwin; then
  119. JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
  120. JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
  121. CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
  122. CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
  123. CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
  124. CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  125. JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
  126. fi
  127.  
  128. # Set juli LogManager config file if it is present and an override has not been issued
  129. if [ -z "$LOGGING_CONFIG" ]; then
  130. if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
  131. LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
  132. else
  133. # Bugzilla
  134. LOGGING_CONFIG="-Dnop"
  135. fi
  136. fi
  137.  
  138. if [ -z "$LOGGING_MANAGER" ]; then
  139. LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
  140. fi
  141.  
  142. # Uncomment the following line to make the umask available when using the
  143. # org.apache.catalina.security.SecurityListener
  144. #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
  145.  
  146. # ----- Execute The Requested Command -----------------------------------------
  147.  
  148. # Bugzilla : only output this if we have a TTY
  149. if [ $have_tty -eq ]; then
  150. echo "Using CATALINA_BASE: $CATALINA_BASE"
  151. echo "Using CATALINA_HOME: $CATALINA_HOME"
  152. echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
  153. if [ "$1" = "debug" ] ; then
  154. echo "Using JAVA_HOME: $JAVA_HOME"
  155. else
  156. echo "Using JRE_HOME: $JRE_HOME"
  157. fi
  158. echo "Using CLASSPATH: $CLASSPATH"
  159. if [ ! -z "$CATALINA_PID" ]; then
  160. echo "Using CATALINA_PID: $CATALINA_PID"
  161. fi
  162. fi
  163.  
  164. if [ "$1" = "jpda" ] ; then
  165. if [ -z "$JPDA_TRANSPORT" ]; then
  166. JPDA_TRANSPORT="dt_socket"
  167. fi
  168. if [ -z "$JPDA_ADDRESS" ]; then
  169. JPDA_ADDRESS=""
  170. fi
  171. if [ -z "$JPDA_SUSPEND" ]; then
  172. JPDA_SUSPEND="n"
  173. fi
  174. if [ -z "$JPDA_OPTS" ]; then
  175. JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  176. fi
  177. CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  178. shift
  179. fi
  180.  
  181. if [ "$1" = "debug" ] ; then
  182. if $os400; then
  183. echo "Debug command not available on OS400"
  184. exit
  185. else
  186. shift
  187. if [ "$1" = "-security" ] ; then
  188. if [ $have_tty -eq ]; then
  189. echo "Using Security Manager"
  190. fi
  191. shift
  192. exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  193. -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
  194. -sourcepath "$CATALINA_HOME"/../../java \
  195. -Djava.security.manager \
  196. -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
  197. -Dcatalina.base="$CATALINA_BASE" \
  198. -Dcatalina.home="$CATALINA_HOME" \
  199. -Djava.io.tmpdir="$CATALINA_TMPDIR" \
  200. org.apache.catalina.startup.Bootstrap "$@" start
  201. else
  202. exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  203. -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
  204. -sourcepath "$CATALINA_HOME"/../../java \
  205. -Dcatalina.base="$CATALINA_BASE" \
  206. -Dcatalina.home="$CATALINA_HOME" \
  207. -Djava.io.tmpdir="$CATALINA_TMPDIR" \
  208. org.apache.catalina.startup.Bootstrap "$@" start
  209. fi
  210. fi
  211.  
  212. elif [ "$1" = "run" ]; then
  213.  
  214. shift
  215. if [ "$1" = "-security" ] ; then
  216. if [ $have_tty -eq ]; then
  217. echo "Using Security Manager"
  218. fi
  219. shift
  220. eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  221. -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  222. -Djava.security.manager \
  223. -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
  224. -Dcatalina.base="\"$CATALINA_BASE\"" \
  225. -Dcatalina.home="\"$CATALINA_HOME\"" \
  226. -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  227. org.apache.catalina.startup.Bootstrap "$@" start
  228. else
  229. eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  230. -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  231. -Dcatalina.base="\"$CATALINA_BASE\"" \
  232. -Dcatalina.home="\"$CATALINA_HOME\"" \
  233. -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  234. org.apache.catalina.startup.Bootstrap "$@" start
  235. fi
  236.  
  237. elif [ "$1" = "start" ] ; then
  238. if [ ! -z "$CATALINA_PID" ]; then
  239. if [ -f "$CATALINA_PID" ]; then
  240. if [ -s "$CATALINA_PID" ]; then
  241. echo "Existing PID file found during start."
  242. if [ -r "$CATALINA_PID" ]; then
  243. PID=`cat "$CATALINA_PID"`
  244. ps -p $PID >/dev/null >&
  245. if [ $? -eq ] ; then
  246. echo "Tomcat appears to still be running with PID $PID. Start aborted."
  247. exit
  248. else
  249. echo "Removing/clearing stale PID file."
  250. rm -f "$CATALINA_PID" >/dev/null >&
  251. if [ $? != ]; then
  252. if [ -w "$CATALINA_PID" ]; then
  253. cat /dev/null > "$CATALINA_PID"
  254. else
  255. echo "Unable to remove or clear stale PID file. Start aborted."
  256. exit
  257. fi
  258. fi
  259. fi
  260. else
  261. echo "Unable to read PID file. Start aborted."
  262. exit
  263. fi
  264. else
  265. rm -f "$CATALINA_PID" >/dev/null >&
  266. if [ $? != ]; then
  267. if [ ! -w "$CATALINA_PID" ]; then
  268. echo "Unable to remove or write to empty PID file. Start aborted."
  269. exit
  270. fi
  271. fi
  272. fi
  273. fi
  274. fi
  275.  
  276. shift
  277. # touch "$CATALINA_OUT"
  278. if [ "$1" = "-security" ] ; then
  279. if [ $have_tty -eq ]; then
  280. echo "Using Security Manager"
  281. fi
  282. shift
  283. eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  284. -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  285. -Djava.security.manager \
  286. -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
  287. -Dcatalina.base="\"$CATALINA_BASE\"" \
  288. -Dcatalina.home="\"$CATALINA_HOME\"" \
  289. -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  290. org.apache.catalina.startup.Bootstrap "$@" start \
  291. >> "$CATALINA_OUT" >& "&"
  292.  
  293. else
  294. eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  295. -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  296. -Dcatalina.base="\"$CATALINA_BASE\"" \
  297. -Dcatalina.home="\"$CATALINA_HOME\"" \
  298. -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  299. -XX:+PrintGCDetails \
  300. -XX:+PrintGCDateStamps \
  301. -XX:+PrintGCTimeStamps \
  302. -Xloggc:"$CATALINA_BASE"/logs/gc.log \
  303. org.apache.catalina.startup.Bootstrap "$@" start "2>&1" | /usr/local/sbin/cronolog -S "$CATALINA_BASE"/logs/catalina_ln.out "$CATALINA_BASE"/logs/catalina.%Y-%m-%d-%H.out >> /dev/null &
  304.  
  305. fi
  306.  
  307. if [ ! -z "$CATALINA_PID" ]; then
  308. echo $! > "$CATALINA_PID"
  309. fi
  310.  
  311. echo "Tomcat started."
  312.  
  313. elif [ "$1" = "stop" ] ; then
  314.  
  315. shift
  316.  
  317. SLEEP=
  318. if [ ! -z "$1" ]; then
  319. echo $ | grep "[^0-9]" >/dev/null >&
  320. if [ $? -gt ]; then
  321. SLEEP=$
  322. shift
  323. fi
  324. fi
  325.  
  326. FORCE=
  327. if [ "$1" = "-force" ]; then
  328. shift
  329. FORCE=
  330. fi
  331.  
  332. if [ ! -z "$CATALINA_PID" ]; then
  333. if [ -f "$CATALINA_PID" ]; then
  334. if [ -s "$CATALINA_PID" ]; then
  335. kill - `cat "$CATALINA_PID"` >/dev/null >&
  336. if [ $? -gt ]; then
  337. echo "PID file found but no matching process was found. Stop aborted."
  338. exit
  339. fi
  340. else
  341. echo "PID file is empty and has been ignored."
  342. fi
  343. else
  344. echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."
  345. exit
  346. fi
  347. fi
  348.  
  349. eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \
  350. -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  351. -Dcatalina.base="\"$CATALINA_BASE\"" \
  352. -Dcatalina.home="\"$CATALINA_HOME\"" \
  353. -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  354. org.apache.catalina.startup.Bootstrap "$@" stop
  355.  
  356. # stop failed. Shutdown port disabled? Try a normal kill.
  357. if [ $? != ]; then
  358. if [ ! -z "$CATALINA_PID" ]; then
  359. echo "The stop command failed. Attempting to signal the process to stop through OS signal."
  360. kill - `cat "$CATALINA_PID"` >/dev/null >&
  361. fi
  362. fi
  363.  
  364. if [ ! -z "$CATALINA_PID" ]; then
  365. if [ -f "$CATALINA_PID" ]; then
  366. while [ $SLEEP -ge ]; do
  367. kill - `cat "$CATALINA_PID"` >/dev/null >&
  368. if [ $? -gt ]; then
  369. rm -f "$CATALINA_PID" >/dev/null >&
  370. if [ $? != ]; then
  371. if [ -w "$CATALINA_PID" ]; then
  372. cat /dev/null > "$CATALINA_PID"
  373. # If Tomcat has stopped don't try and force a stop with an empty PID file
  374. FORCE=
  375. else
  376. echo "The PID file could not be removed or cleared."
  377. fi
  378. fi
  379. ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | sed -e "s/^/kill -9 /g"|sh -
  380. echo "Tomcat stopped."
  381. break
  382. fi
  383. if [ $SLEEP -gt ]; then
  384. sleep
  385. fi
  386. if [ $SLEEP -eq ]; then
  387. if [ $FORCE -eq ]; then
  388. echo "Tomcat did not stop in time. PID file was not removed. To aid diagnostics a thread dump has been written to standard out."
  389. kill - `cat "$CATALINA_PID"`
  390. fi
  391. fi
  392. SLEEP=`expr $SLEEP - `
  393. done
  394. fi
  395. fi
  396.  
  397. KILL_SLEEP_INTERVAL=
  398. if [ $FORCE -eq ]; then
  399. if [ -z "$CATALINA_PID" ]; then
  400. echo "Kill failed: \$CATALINA_PID not set"
  401. else
  402. if [ -f "$CATALINA_PID" ]; then
  403. PID=`cat "$CATALINA_PID"`
  404. echo "Killing Tomcat with the PID: $PID"
  405. kill - $PID
  406. while [ $KILL_SLEEP_INTERVAL -ge ]; do
  407. kill - `cat "$CATALINA_PID"` >/dev/null >&
  408. if [ $? -gt ]; then
  409. rm -f "$CATALINA_PID" >/dev/null >&
  410. if [ $? != ]; then
  411. if [ -w "$CATALINA_PID" ]; then
  412. cat /dev/null > "$CATALINA_PID"
  413. else
  414. echo "The PID file could not be removed."
  415. fi
  416. fi
  417. # Set this to zero else a warning will be issued about the process still running
  418. KILL_SLEEP_INTERVAL=
  419. echo "The Tomcat process has been killed."
  420. break
  421. fi
  422. if [ $KILL_SLEEP_INTERVAL -gt ]; then
  423. sleep
  424. fi
  425. KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - `
  426. done
  427. if [ $KILL_SLEEP_INTERVAL -gt ]; then
  428. echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."
  429. fi
  430. fi
  431. fi
  432. fi
  433.  
  434. elif [ "$1" = "configtest" ] ; then
  435.  
  436. eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \
  437. -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  438. -Dcatalina.base="\"$CATALINA_BASE\"" \
  439. -Dcatalina.home="\"$CATALINA_HOME\"" \
  440. -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  441. org.apache.catalina.startup.Bootstrap configtest
  442. result=$?
  443. if [ $result -ne ]; then
  444. echo "Configuration error detected!"
  445. fi
  446. exit $result
  447.  
  448. elif [ "$1" = "version" ] ; then
  449.  
  450. "$_RUNJAVA" \
  451. -classpath "$CATALINA_HOME/lib/catalina.jar" \
  452. org.apache.catalina.util.ServerInfo
  453.  
  454. else
  455.  
  456. echo "Usage: catalina.sh ( commands ... )"
  457. echo "commands:"
  458. if $os400; then
  459. echo " debug Start Catalina in a debugger (not available on OS400)"
  460. echo " debug -security Debug Catalina with a security manager (not available on OS400)"
  461. else
  462. echo " debug Start Catalina in a debugger"
  463. echo " debug -security Debug Catalina with a security manager"
  464. fi
  465. echo " jpda start Start Catalina under JPDA debugger"
  466. echo " run Start Catalina in the current window"
  467. echo " run -security Start in the current window with security manager"
  468. echo " start Start Catalina in a separate window"
  469. echo " start -security Start in a separate window with security manager"
  470. echo " stop Stop Catalina, waiting up to 5 seconds for the process to end"
  471. echo " stop n Stop Catalina, waiting up to n seconds for the process to end"
  472. echo " stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
  473. echo " stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
  474. echo " configtest Run a basic syntax check on server.xml - check exit code for result"
  475. echo " version What version of tomcat are you running?"
  476. echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"
  477. exit
  478.  
  479. fi
  1. service tomcat start # 启动
  2. service tomcat stop # 停止
  3. ps -ef | grep tomcat # 查看tomcat的运行情况

二、在jar包盛行的时代,需要为各个jar包写一个启动脚本,如下:

  1. #!/bin/bash
  2. #chkconfig:
  3.  
  4. PATH_PWD=$(cd `dirname $`;echo `pwd`)
  5. PATH_LOCATION=/etc/init.d
  6. JAR_NAME=$(basename $)
  7. PATH_WEBAPPS=/www/xx/webapps
  8. PATH_TO_JAR=${PATH_WEBAPPS}/${JAR_NAME}/${JAR_NAME}.jar
  9. PATH_LOG=/opt/logs/${JAR_NAME}
  10. COMMAND_CRONOLOG=`find /usr -type f -name "cronolog" | sed -n "1p" | tr -d " "`
  11. COMMAND_SS=`find /usr -type f -name "ss" | sed -n "1p" | tr -d " "`
  12. PID_PATH_NAME=/var/run/${JAR_NAME}.pid
  13. START_COMMAND=""
  14. PORT_DEFAULT=""
  15. JMX_PORT=
  16.  
  17. if [ x"$PATH_PWD" == x"$PATH_LOCATION" ];then
  18. :
  19. else
  20. echo "script ${JAR_NAME} must be in path ${PATH_LOCATION}!"
  21. exit ;
  22. fi
  23.  
  24. if [ -f ${PATH_TO_JAR} ];then
  25. :
  26. else
  27. echo "${JAR_NAME}.jar doesn't exist in /www/xx/webapps/${JAR_NAME}/";
  28. exit ;
  29. fi
  30.  
  31. {
  32. while :
  33. do
  34. if ${COMMAND_SS} -tln |grep -q ":$JMX_PORT"
  35. then
  36. ((JMX_PORT++))
  37. else
  38. echo "jmx port is $JMX_PORT"
  39. break
  40. fi
  41. done
  42. }
  43.  
  44. service_check(){
  45. if [ -L ${PATH_LOG}/${JAR_NAME}_ln.out ];then
  46. rm -f ${PATH_LOG}/${JAR_NAME}_ln.out && \
  47. echo "${PATH_LOG}/${JAR_NAME}_ln.out has been deleted."
  48. return ;
  49. fi
  50. }
  51.  
  52. service_status(){
  53. ps -ef | grep $PATH_TO_JAR | grep -v grep >/dev/null >&
  54. if [ $? -ne ];then
  55. echo "$JAR_NAME is not running."
  56. rm -rf $PID_PATH_NAME
  57. return ;
  58. else
  59. echo "$JAR_NAME is running."
  60. ps -ef | grep $PATH_TO_JAR | grep -v grep | awk '{print $2}' > $PID_PATH_NAME >/dev/null >&
  61. return ;
  62. fi
  63.  
  64. }
  65.  
  66. service_stop_force(){
  67. ps -ef | grep $PATH_TO_JAR | grep -v grep >/dev/null >&
  68. if [ $? -ne ];then
  69. rm -rf $PID_PATH_NAME
  70. return ;
  71. else
  72. echo "$JAR_NAME will be killed by force!"
  73. ps -ef | grep $PATH_TO_JAR | grep -v grep | awk '{print $2}' | xargs kill - >/dev/null >&
  74. rm -rf $PID_PATH_NAME
  75. return ;
  76. fi
  77.  
  78. }
  79.  
  80. service_start(){
  81. if [ -f $PID_PATH_NAME ]; then
  82. echo "$JAR_NAME is already running"
  83. return ;
  84. else
  85. echo "$JAR_NAME starting ..."
  86. set -e
  87. nohup java -Dfile.encoding=utf- \
  88. -Xloggc:${PATH_LOG}/${JAR_NAME}_gc.log \
  89.       -XX:+PrintGCDetails  \
  90.        -XX:+PrintGCTimeStamps \
  91.        -XX:+PrintGCDateStamps \
  92. -XX:+HeapDumpOnOutOfMemoryError \
  93. -XX:HeapDumpPath=${PATH_LOG} \
  94. -Xms256m \
  95. -Xmx2048m \
  96. -Duser.timezone=GMT+ \
  97. -jar $PATH_TO_JAR $START_COMMAND $PORT_DEFAULT >& | $COMMAND_CRONOLOG -S ${PATH_LOG}/${JAR_NAME}_ln.out ${PATH_LOG}/${JAR_NAME}.%Y-%m-%d-%H.out >> /dev/null &
  98. if [ $? -ne ];then
  99. echo "$JAR_NAME started failed"
  100. exit
  101. else
  102. echo $! > $PID_PATH_NAME
  103. echo "$JAR_NAME started ..."
  104. fi
  105. set +e
  106. return ;
  107. fi
  108. }
  109.  
  110. service_stop(){
  111. if [ -f $PID_PATH_NAME ]; then
  112. echo "$JAR_NAME stoping ..."
  113. ps -ef | grep $PATH_TO_JAR | grep -v grep | awk '{print $2}' | xargs kill - >/dev/null >&
  114. echo "$JAR_NAME stopped ..."
  115. rm -rf $PID_PATH_NAME
  116. return ;
  117. else
  118. echo "$JAR_NAME is not running ..."
  119. return ;
  120. fi
  121. }
  122.  
  123. service_tag(){
  124. echo "----------------------------------------------------------------------------------------------------------"
  125. }
  126.  
  127. service_info(){
  128. service_tag
  129. echo "info-use service ${JAR_NAME} start|stop|status|restart"
  130. echo "info-jar $PATH_TO_JAR"
  131. echo "info-log ${PATH_LOG}/${JAR_NAME}_ln.out"
  132. echo "info-gc-log ${PATH_LOG}/${JAR_NAME}_gc.log"
  133. echo "info-heapdump-log ${PATH_LOG}"
  134. echo "info-memory -Xms256m -Xmx2048m"
  135. service_tag
  136. }
  137.  
  138. # 接收命令开始
  139. case "$1" in
  140. "status")
  141. service_tag
  142. service_status
  143. service_info
  144. ;;
  145. "start")
  146. service_status >/dev/null >&
  147. service_check
  148. service_start
  149. service_tag
  150. service_status
  151. ;;
  152. "stop")
  153. service_status >/dev/null >&
  154. service_tag
  155. service_stop
  156. sleep
  157. service_stop_force
  158. ;;
  159. "restart")
  160. service_status >/dev/null >&
  161. service_stop
  162. sleep
  163. service_stop_force
  164. service_check
  165. service_start
  166. service_tag
  167. service_status
  168. ;;
  169. *) echo "Usage: service ${JAR_NAME} status|start|stop|restart" ;;
  170. esac

  运行脚本:

  1. service ser01 stop #启动
  2. service ser01 start #停止
  3. ps -ef | grep java #服务运行情况

  shell 脚本确实很方便,虽然这会涉及到另一个专业领域的东西,但是自已使用一下也很安逸呢~

  尤其在排查问题时, shell方面的知识往往会帮自己很大的忙。

  想要将自己写的脚本添加到service命令中,只需将该脚本移动到  /etc/init.d/ 目录下,即可以使用  service xxx command 了。

写一个shell 快速启动停止你的微服务吧的更多相关文章

  1. SpringBoot项目快速启动停止脚本

    SpringBoot项目快速启动停止脚本 1.在jar包同级目录下,创建 app.sh #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] t ...

  2. shell脚本,一个shell的启动流程。

    #一个shell的启动流程 #shell有一些变量,叫做环境变量,这些变量是可以继承的, #比如父shell有$UID,子shell也可以有,而且继承父shell的. #正常我们声明一个变量,a=,在 ...

  3. 如何用ABP框架快速完成项目(7) - 用ABP一个人快速完成项目(3) - 通过微服务模式而不是盖楼式来避免难度升级和奥卡姆剃刀原理

    这节文章十分重要!十分重要!十分重要!   很多同学在使用ABP的过程中遇到很多问题, 花费了很多时间和精力都还无法解决, 就是卡在这节文章这里.   Talk is cheap, just show ...

  4. Linux shell脚本启动 停止 重启jar包

    最近做的微服务jar包想弄在持续集成中自动化部署,所以首先得有一个操作jar包的脚本 只需将jar文件的路径替换到APP_NAME的值就可以了,其他不用改 注意:window编辑的shell文件,通过 ...

  5. 在linux写一个shell脚本用maven git自动更新代码并且打包部署

    服务器上必须安装了git maven jdk 并且配置好环境变量 实际服务器中可能运行着多个Java进程,所以重新部署的时候需要先停止原来的java进程,写一个按照名称杀死进程的脚本 kill.sh ...

  6. 写一个shell,自动执行jmeter测试脚本

    贡献一个自己写的shell脚本,很简单,但又可以高效率的自动执行jmeter压测脚本. #!/bin/bash #author:zhangyl #version:V1 #该脚本放置于压测脚本的上一层目 ...

  7. 如何通过写一个chrome扩展启动本地程序

    @(编程) [toc] 本文介绍如何利用Chrome 的插件, 从我们的一个网站中启动一个我们的本地程序.本文的环境是windows10,本文的例子是通过点击网页上的一个button,调用本地的wor ...

  8. 从DOS bat启动停止SQL Server (MSSQLSERVER)服务

     由于机器上装了SQL Server2008,导致机器开机变慢,没办法只能让SQL Server (MSSQLSERVER) 服务默认不启动.但是每次要使用SQL Server时就必须从控制面板-管理 ...

  9. 写一个shell脚本利用wget抓取股票历史数据

    今天,大数据部老大交给我一项任务——抓取股票历史数据.于是乎,我自行在网上找了一下,发现wget真真是一个非常强大的linux下载工具.我已经被深深震撼到了.下面叙述今天的一些过程,还是比较坎坷的. ...

随机推荐

  1. 剑指offer例题——反转链表

    题目描述 输入一个链表,反转链表,输出新链表的表头 程序编写 将链表反转 public class Solution { public ListNode ReverseList(ListNode he ...

  2. jQuery formValidator API

    jQuery formValidator插件的API帮助 目前支持5种大的校验方式,分别是:inputValidator(针对input.textarea.select控件的字符长度.值范围.选择个数 ...

  3. 连接mysql报错Access denied for user 'root'@'localhost' (using password: YES)解决办法

    1.打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”(免密码登录),保存并关闭文件,重启MySQL服务. 2.通过命令行进入MySQL的BIN目录,输 ...

  4. cacti监控服务器

    1.Cacti基本概念详解 Cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户 ...

  5. 分库工具mysql

    sharding-sphere  比mycat 更方便 在于mycat属于中间件,更复杂,但也支持更多功能.查询功能更强.

  6. Java学习笔记(二十二):打包程序

    加入一个程序测试完毕,我们就可以将它打包,就可以放到服务器上运行了 找到左下角的终端 点击 输入命令: mvnw clean package -DskipTests=true clean:清除以前生成 ...

  7. Centos7下安装Docker[z]

    [z]https://www.cnblogs.com/qgc1995/p/9553572.html https://yq.aliyun.com/articles/691610?spm=a2c4e.11 ...

  8. java 远程debug

    在启动jar包添加如下参数16091是端口 java -Xdebug -Xrunjdwp:transport=dt_socket,address=16091,server=y,suspend=n -j ...

  9. jenkins shell部署

    jenkins执行shell脚本 jenkins执行shell 上一篇说的是jenkins+svn+maven把war包自动部署到Tomcat,这篇是从SVN上拉取代码maven生成jar文件,并且拷 ...

  10. NC 6系总账凭证联查原始单据

    单据联查凭证可以找个如收款结算单的仿写一个. 而总账凭证联查单据则需要实现联查单据的类,重新写一个类.并把类注册进数据库. 最终效果: public class QuerySellcarryBillS ...