#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 "====="