zoukankan      html  css  js  c++  java
  • 最近写了一个bash shell脚本

    #Linux下最近写了几个shell脚本, 有点小收获, 记录下来, 以后在写shell时, 备查.
     
    ##=============================
    ##file: start_manually.sh
    ##purpose: start all background programs manually
    ##=============================

    #知识点: 等待用户的输入
    read -p "This shell will kill all unloading background programs before re-start. Do you continue? (y/n) " RESP
    if [ "$RESP" = "y" ];
    then # 在脚本或命令行中,if...then...else...fi或者while...do...done结构, 如果两个关键词在同一行中,则必须要有分号“;”来分隔,也就是说, 在不同行中可用可不用分号,但在同一行中,必须有分号,否则bash将无法解析这些关键词.
      echo "start_manually.sh ...."
    else
      exit 0  #知识点, 直接退出程序的写法
    fi


    LOG_FILE=$HOME/unload_start_manually.log
    #知识点: 如何判断文件是否存在, 不存在的话, touch一个空文件
    if [ ! -f $LOG_FILE ]
    then
      touch $LOG_FILE
    fi

    #知识点: 如何拿到文件的size
    LOG_FILE_SIZE=`ls -l $LOG_FILE | awk '{print $5}'`


    #知识点: 如果log文件太大的话, 仍往其中追加内容, 效率就会变差.
    #一个好的做法是: 在写日志前, 先看看log文件的大小,
    #如果太大, 重新生成一个文件(因为太老的日志其实没有多少用处), 否则, 直接追加内容
    if [ $LOG_FILE_SIZE -gt 10000 ];
    then
      echo "New file " > $LOG_FILE
    fi
    echo "`date`" >>$LOG_FILE #知识点: 必须使用""来包着, 如果使用''包着, 不会输出当前日期


    #知识点: 同时输出日志到log文件和屏幕上
    echo "Define some common variables and change current path" >>$LOG_FILE
    echo "Define some common variables and change current path"
    . $HOME/.bash_profile
    IS_TEST=$UNLOAD_IS_TEST
    cd /data/unload


    #知识点: 如何通过程序的名称来kill的进程
    echo "kill the unload background processes">>$LOG_FILE
    ps -ef|grep -v grep|grep -i 'java -jar JobMonitor'|awk '{printf("kill -9 %s\n",$2)}' |sh
     


    echo "Run unload background processes">>$LOG_FILE
    echo "Run unload background processes"
    #知识点: 通过nohup方式启动后台jar进程, 因为jar程序本身使用了log4j生成日志,
    #所以nohup命令直接将日志和错误日志输出定向到/dev/null
    nohup java -jar JobMonitor.jar  $IS_TEST   > /dev/null 2> /dev/null &
     
     

    ##step 90: end
    echo "=====" >>$LOG_FILE
    echo "====="

  • 相关阅读:
    大型项目使用Automake/Autoconf完成编译配置
    用C语言编写Windows服务程序的五个步骤
    RPC的发展历史(本质就是双方定义好协议,传递参数后远程调用)
    libuv和libev 异步I/O库的比较
    zlog 程序日志的库 交叉编译(Linux生成ARM库,观察执行步骤)
    应用服务
    EvnetBus
    this指向
    CPU使用率
    数据量小,创建索引有必要吗
  • 原文地址:https://www.cnblogs.com/harrychinese/p/One_Simple_Bash_Script_Sample.html
Copyright © 2011-2022 走看看