最近写了一个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 "====="