首页 > 技术文章 > shell部分脚本

sewell 2022-04-29 11:10 原文

CentOS Linux release 7.9.2009 (Core)

写的有点累赘,不想改了

项目重启脚本

启动方式  sh restart.sh yourproject.jar

需要填写自己的dir

#!/bin/sh
PROJECT_PATH=/your-proj-dir/
PROJECT_NAME=$1
PROJECT_ALL_LOG_NAME=/catalina.out

if [ -z "$1" ]
then 
   echo "请输入jar包名称"
   exit
fi

function getTPid(){
    if [ -z "${1}" ]; then
        tpid=0
        return
    fi

   #参数 tpid 可能多个
   tpidcount=`echo "${1}" | wc -l`
     #判断是否大于1 是则获取第一个进程,否则赋值为空
    if [ $tpidcount -gt 0 ] 
     then
        tpid=`echo "${1}" | head -n1`
     else 
        tpid=0
    fi
}

# stop process
tpid=`ps -ef|grep ${PROJECT_NAME}|grep java|grep -v grep|grep -v kill|awk '{print $2}' `

getTPid "${tpid}"


if  test ${tpid} -eq 0 
 then
    echo '初次检查:没有进程在运行'
 else
    echo '初次检查:有程序在运行,进行关闭'
    # 是先关闭和其有关的程序,再将其关闭
    kill -15 ${tpid}
fi
sleep 5

tpid=`ps -ef|grep $PROJECT_NAME|grep java|grep -v grep|grep -v kill|awk '{print $2}'`

getTPid "${tpid}"

if test ${tpid} -eq 0 
 then 
    echo '再次检查:没有进程在运行'
 else
    echo '再次检查:有程序在运行,进行关闭'
    kill -9 $tpid
fi

# start process
tpid=`ps -ef|grep $PROJECT_NAME|grep java|grep -v grep|grep -v kill|awk '{print $2}'`

getTPid "${tpid}"


if test ${tpid} -eq 0 
then
    echo '启动新进程.'
   `nohup java -Xms256m -Xmx512m -jar $PROJECT_PATH$PROJECT_NAME > $PROJECT_PATH$PROJECT_ALL_LOG_NAME 2>&1 &`
#   `nohup java -Xms256m -Xmx512m -jar ${PROJECT_PATH}${PROJECT_NAME}  >> /dev/null 2>&1 &
#`
    echo '启动成功'
    sleep 2
    tail -f $PROJECT_PATH$PROJECT_ALL_LOG_NAME
else
    echo '有进程运行,重启失败'
fi

 

备份、定时删除自己项目中一些特殊文件

#!/bin/bash

#设置删除多少天之前的备份
DAYS_AGO=365

#定义日期变量,时间戳的单位以秒为单位
SECOND=1
MINUTE=$((60*$SECOND))
HOUR=$((60*$MINUTE))
DAY=$((24*$HOUR))
WEEK=$((7*$DAY))


#计算当前时间的时间戳表达方法
TIME_NOW=$(($(date +%s -d "$(date +'%Y-%m-%d %H:%M:%S')")))
#多少天之前的
SECONDS_OF_DAYS_AGO=$(($DAYS_AGO * $DAY))
#计算指定天数前的时间戳表达方法
TIME_AGO=$(($TIME_NOW - $SECONDS_OF_DAYS_AGO))

#判断传入的日期是否在设置的日期之前
function isDaysBefore()
{
  
  DATE=$(($(date +%s -d $1)))
  if [[ $DATE < $TIME_AGO ]] 
  then
    echo 1
  else
    echo 0
  fi
}


SOURCE_DIR="/xxx_tmp"
BAK_DIR="/xxx_bak"


cd "$SOURCE_DIR"

#打包文件
tar zcf xxx_prefix_$(date +%Y%m%d).tar.gz img zip

mv xxx_prefix_$(date +%Y%m%d).tar.gz $BAK_DIR

cd "$BAK_DIR"


#删除打包完的文件
rm -rf /xxx/dir1/*;
rm -rf /xxx/dir2/*;


#删除指定日期之前的

for FOLDER in `ls $BAK_DIR`; do
  #截取年月日
  folder_date=`expr substr $FOLDER 19 8`
  if [[ $(isDaysBefore ${folder_date}) == 1 ]]
  then
     rm -rf /xxx_bak/${FOLDER}
  fi
done

 

定时删除日志

1 0 * * * /bin/sh /data/shell-script/log-del.sh > /dev/null 2>&1 &

LOG_DIR=/data/logs
OLD_DATE=`date --date='1 month ago' +%Y-%m-%d`;

for FOLDER in `ls ${LOG_DIR}`
do
  log_file=${LOG_DIR}/${FOLDER}/spring.log.${OLD_DATE}*.gz
  rm -rf ${log_file}
  # echo "删除${log_file}成功"
done

 

删除指定日期前的文件

#设置删除多少天之前的备份
DAYS_AGO=60

#定义日期变量,时间戳的单位以秒为单位
SECOND=1
MINUTE=$((60*$SECOND))
HOUR=$((60*$MINUTE))
DAY=$((24*$HOUR))
WEEK=$((7*$DAY))

DEL_DIR="/data/logs"


#计算当前时间的时间戳表达方法
TIME_NOW=$(($(date +%s -d "$(date +'%Y-%m-%d %H:%M:%S')")))
#多少天之前的
SECONDS_OF_DAYS_AGO=$(($DAYS_AGO * $DAY))
#计算指定天数前的时间戳表达方法
TIME_AGO=$(($TIME_NOW - $SECONDS_OF_DAYS_AGO))

#判断传入的日期是否在设置的日期之前
function isDaysBefore()
{
  if [ -z "$1" ]
  then 
    return 0
  fi  
  
  DATE=$(($(date +%s -d $1)))
  if [[ $DATE < $TIME_AGO ]] 
  then
    echo 1
  else
    echo 0
  fi
}

function del_dir()
{
  for FILE in `ls $1`
  do
    file_date=`expr substr $FILE 12 10`
    if [[ $(isDaysBefore ${file_date}) == 1 ]]
    then
      rm -rf $1/${FILE}
      echo "删除文件:$1/${FILE}"
    fi
  done
}

#删除指定日期之前的
for FOLDER in `ls $DEL_DIR`; do
  del_dir $DEL_DIR/${FOLDER}
 
done

 

推荐阅读