linux、windows 可执行脚本

WINDOWS脚本

@echo off    Shell窗口不再打印指定,而只打印echo输出信息

call XXX     调用其他批处理,完成后继续执行下一行指令。

例如使用maven打包指定 mvn clean package,打包后默认会自动关闭dos窗口而不执行下一行命令,若使用call mvn                      XX则不会受到上面的影响。

 

关闭指定7700端口服务并重启:

@echo off
d:
cd "file\启动程序路径"
set port=7700
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /F /pid %%m
start "ServiceName" "D:\绝对路径\程序.exe"
 

 

 

LINUX脚本

#!/bin/bash 代表这是个可执行脚本。

source /etc/profile    //使用source /etc/profile编译后只能在当前终端生效,重新开启一个终端后,该环境变量失效。

export  JAVA_HOME=""  //可新增,修改或删除环境变量

 

除了if,shell还支持for、case

 

 

explain:例如这条shell,代表syserr2与sysout1合并,并且sysout1指向log文件。

nohub & 作用详解

脚本里不少见nohub sh XXX.sh &,里面nohub和&作用是什么?

使用&后台运行程序:

  • 结果会输出到终端

  • 使用Ctrl + C发送SIGINT信号,程序免疫

  • 关闭session发送SIGHUP信号,程序关闭(关闭远程SSH回话)

使用nohup运行程序:

  • 结果默认会输出到nohup.out

  • 使用Ctrl + C发送SIGINT信号,程序关闭

  • 关闭session发送SIGHUP信号,程序免疫

平日线上经常使用nohup和&配合来启动程序

  • 同时免疫SIGINT和SIGHUP信号,达成守护线程运行(其实一般nohup也够用了)

 

 

变量$含义

$$:shell本身的PID

$!:shell最后运行的后台PID

$?:最后运行的命令的结束代码(返回值)

$*:所有参数列表,如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$0:shell本身的文件名

$1~$n:添加到shell的各参数值,依次是第一个,第二个,...

 

脚本示例

1.启动模块sh

#!/bin/sh
#
# Start/Stop the centrum server.
#



SERVER_PID_DIR="./logs"
SERVER_LOG="${SERVER_PID_DIR}/server.out"
SERVER_PID="${SERVER_PID_DIR}/server.pid"

CLASSPATH="conf:lib/$(ls lib | grep 'sharecommon'):lib/*"

if [ ! -d "${SERVER_PID_DIR}" ]; then
mkdir "${SERVER_PID_DIR}"
fi 

if [ ! -f "${SERVER_LOG}" ]; then
touch "${SERVER_LOG}"
fi 
 
loadJavaOpts () {
  server_java_opts=`grep '^[ \t]*server\.java\.opts' ./conf/server.conf | sed 's/[ \t]*server\.java\.opts=//'`
  if [ -z "${server_java_opts}" ]; then
  echo "-XX:MaxPermSize=192m -Xmx512m -Xms512m"
  fi
  echo "${server_java_opts}"
}

waitForPid () {
  MTRPID=${1}
  MAXTRIES=${2}

  TRIES=0
  echo "waitForPid: waiting for ${MTRPID}"
  while [ 1 -eq 1 ]; do
    PIDCHECK=`kill -0 ${MTRPID} 2> /dev/null`
    if [ $? -eq 1 ]; then
      echo "centrum server PID ${MTRPID} exited"
      return 1
    fi
 	echo "waitForPid: PID ${MTRPID} still alive" 
    sleep 2
    TRIES=`expr ${TRIES} + 1`
    if [ ${TRIES} -ge ${MAXTRIES} ] ; then
       echo "num TRIES exhausted: ${TRIES} -ge ${MAXTRIES}"
       break
    fi
  done

  echo "Centrum server PID ${MTRPID} did not exit."
  return 0;
}

doStop () {
  doStopSignal "TERM"
}

doStopSignal () {

  SIGNAME=${1}
  if [ "x${SIGNAME}" = "x" ] ; then
    echo "No signal specified"
    exit 127
  fi

  echo "checking pidfile exists: ${SERVER_PID}"
  if [ -f "${SERVER_PID}" ] ; then
    MTRPID=`cat ${SERVER_PID} | tr -d ' '`
    if [ "x${MTRPID}" = "x" ] ; then
      echo "centrum pid file was empty: ${SERVER_PID}"
      exit 127
    fi

    jstack ${MTRPID} > centrum.stop.stack
    kill -${SIGNAME} ${MTRPID} 2> /dev/null
    
    waitForPid ${MTRPID} 60
    if [ $? -eq 0 ] ; then
      exit 1
    fi
    rm -f ${SERVER_PID}
  else 
    echo "centrum server not running (no pid file found: ${SERVER_PID})"
  fi
}

doStart () {
# Is the server already running?
echo "checking pidfile exists: ${SERVER_PID}"
if [ -f "${SERVER_PID}" ] ; then
  MTRPID=`cat ${SERVER_PID} | tr -d ' '`
  if [ ! "x${MTRPID}" = "x" ] ; then
    PIDCHECK=`kill -0 ${MTRPID} 2> /dev/null`
    if [ $? -eq 1 ]; then
      echo "Removing stale pid file ${SERVER_PID}"
      rm -f ${SERVER_PID}
    else 
      echo "centrum server is already running (pid ${MTRPID})."
      exit 0
    fi
  fi
fi

# Setup JAVA_OPTS from server.conf
JAVA_OPTS=`loadJavaOpts`

# Start the server
echo "Booting the centrum server (Using JAVA_OPTS=${JAVA_OPTS})..."

java -Dfile.encoding=UTF-8 ${JAVA_OPTS} -cp ${CLASSPATH} com.xuanwu.msggate.centrum.core.server.CentrumServer > ${SERVER_LOG} 2>&1 &

  # Save the pid to a pidfile
  MTRPID=$!
  echo "${MTRPID}" > ${SERVER_PID}
}

case "$1" in
  start)
    echo "Starting centrum server..."
    doStart
    echo "centrum server booted."
    ;;
  stop)
    echo "Stopping centrum server..."
    doStop
    echo "centrum server is stopped."
    ;;
  *)
    # Print help, don't advertise halt, it's nasty
    echo "Usage: $0 {start|stop}" 1>&2
    exit 1
    ;;
esac

exit 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值