[关闭]
@xtccc 2016-07-02T00:14:49.000000Z 字数 1351 阅读 3377

start.sh, stop.sh, status.sh

给我写信
GitHub

此处输入图片的描述

Shell


目录



1. startup.sh


  1. #!/bin/bash
  2. # 不论从哪里执行start.sh, 都会进入start.sh的所在目录
  3. SOURCE="${BASH_SOURCE[0]}"
  4. BIN_DIR="$( dirname "$SOURCE" )"
  5. cd $BIN_DIR
  6. PidFile=".pid"
  7. LogDir="logs"
  8. if [ -f $PidFile ]; then # .pid文件是否存在
  9. pid=`tail -1 $PidFile` # .pid文件最后一行的内容
  10. if [ "x" != "x$pid" ]; then # 变量pid是否有值
  11. ret=`ps aux | awk '{print $2}' | grep $pid`
  12. if [ "x" != "x$ret" ]; then
  13. echo "发现正在运行的DataService(pid = $pid), 请勿再次启动"
  14. exit $?
  15. fi
  16. fi
  17. fi
  18. if [ ! -d $LogDir ]; then
  19. mkdir $LogDir
  20. fi
  21. # 后台运行命令,并将日志重定向
  22. nohup $cmd >"$LogDir/nohup.out" 2>&1 &
  23. pid=$! # $!是最近被执行的后台进程的pid
  24. echo "DataService开始运行, pid = $pid"
  25. echo "$pid" >> "$PidFile" # 将pid写入到.pid文件



注意点

在判断一个变量是否有值的时候,我们使用了:

  1. if [ "x" != "x$pid" ] ...

我们没有用下面的方式,因为发现它不靠谱:

  1. if [ ! -z x ] ...




2. stop.sh


  1. #!/bin/bash
  2. PidFile=".pid"
  3. if [ ! -f $PidFile ]; then
  4. echo "当前未运行 (没有找到pid文件)"
  5. exit $?
  6. fi
  7. pid=`tail -1 $PidFile`
  8. if [ "x" == "x$pid" ]; then
  9. echo "当前未运行 (存在pid文件, 但是其中没有任何pid)"
  10. exit $?
  11. fi
  12. ret=`ps aux | awk '{print $2}' | grep $pid`
  13. if [ "x" == "x$ret" ]; then
  14. echo "当前未运行 (目标pid = $pid)"
  15. exit $?
  16. fi
  17. echo "正在停止DataService (目标pid=$pid)"
  18. kill -9 $pid
  19. echo "DataService已停止"


注意点

我们使用了 $? 来输出返回值,参考 returning value from called function in shell script




3. status.sh


  1. #!/bin/bash
  2. PidFile=".pid"
  3. if [ ! -f $PidFile ]; then
  4. echo "未运行 (原因: 没有找到pid文件)"
  5. exit $?
  6. fi
  7. pid=`tail -1 $PidFile`
  8. if [ "x" == "x$pid" ]; then
  9. echo "未运行 (原因: 存在pid文件, 但是其中没有任何pid)"
  10. exit $?
  11. fi
  12. ret=`ps aux | awk '{print $2}' | grep $pid`
  13. if [ "x" == "x$ret" ]; then
  14. echo "未运行"
  15. exit $?
  16. else
  17. echo "正在运行 (pid=$pid)"
  18. exit $?
  19. fi
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注