Linux使用shell脚本定时删除历史日志文件

1、tools目录文件结构

[root@www tools]# tree tools/
tools/
├── bin
│  ├── del_history_files
│
└── etc
  ├── del_history_files.cfg

2 directories, 2 files

2、删除历史文件脚本 del_history_files

[root@www tools]# more tools/bin/del_history_files
#!/bin/sh

# 删除指定目录下,文件时间早于指定时间节点的文件,时间粒度:小时
# 配置文件格式 : 需清理的目录=小时数
#
#
# define restricted path
PATH="/bin:/usr/bin:/sbin:/usr/sbin"

# adirname - return absolute dirname of given file
adirname() { odir=`pwd`; cd `dirname $1`; pwd; cd "${odir}"; }

# ---------
# constants
# ---------
MYNAM=`basename "$0"`
MYDIR=`adirname "$0"`
MYCFG="${MYDIR}/../etc/${MYNAM}.cfg"
MYTMP="${MYDIR}/../tmp"
MYLCK="${MYTMP}/${MYNAM}.lock"

# perform some locking (as good as it gets in a shell)
[ -s "${MYLCK}" ] && kill -0 `cat "${MYLCK}"` 2>/dev/null &&
    die "${MYNAM}: already running!"
echo "$$" > "${MYLCK}"

PATHS=(`cat ${MYCFG}`)
for PP in ${PATHS[@]}
do
  APP_PATH=`echo ${PP} | awk -F'=' '{print $1}'`
  N=`echo ${PP} | awk -F'=' '{print $2}'`
    if [ -d ${APP_PATH} ] ; then
    T=`/bin/date --date "${N} hours ago" "+%Y%m%d%H%M"`
    TMP_FILE="/tmp/`echo ${PP} | md5sum | awk '{print $1}'`"
    touch -t ${T} ${TMP_FILE}
    find ${APP_PATH} ! -newer ${TMP_FILE} -type f -print0 | xargs -0 -n 100 rm -rf
    find ${APP_PATH} -type d -empty -print0 | xargs -0 -n 100 rm -rf &> /dev/null
    fi
done

rm -rf ${MYLCK}

3、删除历史文件脚本的配置文件 del_history_files.cfg

[root@www tools]# more tools/etc/del_history_files.cfg
#需清理的目录=小时数
/home/logs/nginx=720
/home/logs/varnish=720

4、crontab 执行即可

[root@www tools]# more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
#clear old logs
00 6 * * * root /home/tools/bin/del_history_files

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-08-22

Linux shell 提取文件名和目录名的方法

${} [root@node01 ~]# file=/dir1/dir2/dir3/my.file.txt [root@node01 ~]# echo ${file#*/} dir1/dir2/dir3/my.file.txt 删掉第一个 / 及其左边的字符串 [root@node01 ~]# echo ${file##*/} my.file.txt 删掉最后一个 /  及其左边的字符串 [root@node01 ~]# echo ${file#*.} file.txt 删掉第一个 .  及其左

Linux配置SSH和Xshell连接服务器的教程(图解)

>>>>>Ubuntu安装和配置ssh教程 SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑 上是否安装了客户端和服务器.如果只是想远程登陆别的机器只需要安装客户端 (Ubuntu默认安装了客户端),如果要本机的SSH服务就需要安装服务器. 首先确认ssh-server是否已经启动了,下面是已经启动过了. ~$ dpkg -l | grep ssh [/code] ~$ sudo apt install open

linux shell 中判断文件、目录是否存在的方法

本文主要介绍了linux shell 中判断文件.目录是否存在的方法,分享给大家 -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L filename 如果 filename为符号链接,则为真 -r filename 如果 filename可读,则为真 -w filename 如果 filename可写,则为真 -x filename 如果 filenam

Xshell5连接虚拟机中的Linux的方法以及失败原因解决

很早以前就装了虚拟机,现在终于装上了Linux.虽然机子的配置还不错,虚拟机一般也不会特别卡,但是来回切换有时也是一件十分令人头疼的事情.虽然说不卡,但是CPU占用率还是很高的.也十分耗电.所以自从听说了有Xshell这个神器之后 我就开始对他进行了相关的钻研.(出现问题请直接往下拉.) 首先Xshell是一个通过在同一网段进行连接两个主机的一款应用.简单的来说就是可以用一台机器来操控多台电脑的一个应用.注意 是同一个网段,这个概念很重要我们在配置Xshell的时候是一定会用到的.这个应用可以让

linux shell 根据进程名获取pid的实现方法

导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程,因此在获取进程 pid 上二者也有所区别. 交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid 的方法为(这里添加 -v grep是为了避免匹配到 grep 进程): ps -ef | grep "name" | grep -v grep | awk '{p

Linux下shell通用脚本启动jar(微服务)

vim app_jar.sh #!/bin/bash #source /etc/profile # Auth:Liucx # Please change these parameters according to your real env. # set Java Home: Remember that dolphin only supports JDK8! JAVA_HOME=/usr/java/jdk1.8.0_162 # application directory cd `dirname

用xshell连接VMware中的Linux的方法步骤(2种)

[前言] 最近想压测一下ITOO的考试系统,所以想在自己电脑上安装一下linux,然后安装一下jmeter进行压测一下. 不过为什么要连接xshell呢,因为在虚拟机上总是会和主机切换鼠标,而且也不能粘贴复制,所以用xshell连接就会比较方便. [提示] CentOS7 以下两种方法建议使用第一种设置静态ip的方法. [步骤] 一.安装VMware 直接点击下一步即可 二.安装linux 下载CentOS,在VMware中安装,这个网上有很多教程,这里就不赘述了. 三.配置 一种方式是设置动态

Linux利用Shell脚本部署jar包项目的完整步骤

一.安装JDK 查看电脑的操作位数: uname -ar 2017 x86_64 x86_64 x86_64 GNU/Linux 如果这里显示是64位的就下载相应64位的包 jdk的下载地址,推荐下载tar.gz的包 www.oracle.com/technetwork- 下面开始正式的安装jdk 1.上传jdk的安装包到 /root jdk-8u131-linux-x64.tar.gz 2.确认系统是否已经安装过jdk rpm -qa|grep jdk rpm -e --nodeps 软件名称

使用Docker部署war包项目的实现

使用Docker部署war,必须要用容器,我们就用tomcact容器,其实都是将war包丢到tomcat的webapps目录下,tomcat启动的情况下会自动解压war包. 一种是在Docker中安装tomcat容器的镜像,然后把war包丢到tomcat镜像下webapps中即可.但是如果tomcat关闭了,其webapps下的包就会消失:二就是利用挂载,还是安装tomcat容器的镜像,但是不把war包丢到tomcat下的webapps中,直接创建一个外部文件夹,将这个外部文件夹跟wabapps

window和linux通过tomcat9手工部署war包的方法

亲测在windows环境和linux环境不一样 Windows 第1步: 用maven打war包 (假如得到的war包名为: hello-back.war) 第2步: 把war包拷贝到tomcat安装的webapps目录下 第3步: 启动tomcat (可以在conf/server.xml修改端口号) 第4步: 浏览器访问就好了127.0.0.1::8080 linux 同样的操作 同样的部署,没有样式,什么鬼 不急不急... 这里有个问题,它默认根目录是要加项目名的,如上加了hello-bac

shell脚本编写ping包及arp的监控并发送短信功能

下面给大家分享shell脚本编写ping包及arp的监控并发送短信功能,具体代码如下所示: #!/bin/bash NOW="`date +%Y%m%d-%H:%M:%S`" PHONES=15134567893 IP=10.100.8.78 GATEWAY=10.100.30.1 #ping失误的短信内容 content1="host is failed" #arp主机网关失误的短信内容 content2="GW is failed" #pin

Linux 在Shell脚本中使用函数实例详解

Linux 在Shell脚本中使用函数实例详解 Shell的函数 Shell程序也支持函数.函数能完成一特定的功能,可以重复调用这个函数. 函数格式如下: 函数名() { 函数体 } 函数调用方式: 函数名 参数列表 实例:编写一函数add求两个数的和,这两个数用位置参数传入,最后输出结果. root@ubuntu:/home/study# vi test3 #!/bin/bash add(){ a=$1; b=$2; z=`expr $a + $b`; echo "The sum is $z&

利用Shell 脚本解决DDOS攻击问题

思路:主要利用 awk ,if结构,sort,uniq #!/bin/bash FilePath="access.log" awk '{print $1}' $FilePath | sort -rn | uniq -c >ip_count.log cat ip_count.log | while read text ####读取文件内容,以行为单位 do echo $text count=`echo $text | awk '{print $1}' ` ip=`echo $tex

使用Linux的Shell脚本定时处理MySQL超时

最近一段时间,我刚刚进入一家新公司,并接手了这里的一个站点,由于这个站点的架构设计不太合理,导致MySQL的压力始终很大,经常出现超时的Locked进程,于是编写了一段Linux的Shell脚本来定时kill掉这些进程.脚本如下: 复制代码 代码如下: #!/bin/bash mysql_pwd="xxxxxx" #mysql的root密码 mysql_exec="/usr/local/mysql/bin/mysql"tmp_dir="/tmp"

Linux Crontab Shell脚本实现秒级定时任务的方法

一.编写Shell脚本crontab.sh #!/bin/bash step=1 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(php '/home/www/php/crontab/crontab.php') sleep $step done exit 0 二.crontab -e 输入以下语句,然后:wq 保存退出 # m h dom mon dow command * * * * * /home/www/php/crontab

Linux通过Shell脚本命令修改密码的两种方式

交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. passwd username 使用passwd username 修改 username 的密码: 使用该命令会有提示,即进入了交互界面,输入密码即可. 使用脚本修改密码 很多时候我们可能需要远程执行服务器上的脚本来修改账号密码,此时就没有办法进行交互了. 此时可以使用如下两种方式修改密码: 方式1:

Linux中shell脚本获取当前工作目录的方法

如下: workdir=$(cd $(dirname $0); pwd) 步骤1 dirname $0,取得当前执行的脚本文件的父目录 步骤2 cd到父目录,即进入当前工作目录 步骤3 pwd显示当前工作目录 以上这篇Linux中shell脚本获取当前工作目录的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.