2019-06-11 19:57:00 seulzz 阅读数 639
  • Linux shell脚本习题

    Shell脚本是Linux运维、自动化运维体系中不可或缺的一个非常重要的部分,几乎所有的招聘需求中都会要求会写Shell脚本。 很多人都觉得Shell脚本不会写,写不出来。这就是因为练习不够。体系课程一共包含100道Shell习题,只要你全部学完这100道题,相信你的Shell脚本能力会有大幅度提升。

    420 人正在学习 去看看 李世明

方式一:

     linux详细日志输出,可以通过执行脚本时,添加-x,可以打印出详细执行过程

     例如: sh -x ${ZDH_HOME}/manager/startService.sh kylin kylin kylin 16

+脚本输出

++脚本调用脚本输出

+++以此类推

方式二:

    在liunx脚本中可用set -x就可有详细的日志输出.免的老是要echo了

linux shell 脚本编写好要经过漫长的调试阶段,可以使用sh -x 执行。但是这种情况在远程调用脚本的时候,就有诸多不便。

又想知道脚本内部执行的变量的值或执行结果,这个时候可以使用在脚本内部用 set -x 。

set去追踪一段代码的显示情况,执行后在整个脚本有效

set -x 开启 

set +x关闭

set -o 查看

#!/bin/bash
set -x
CURRENT_DIR=$(cd "$(dirname "$0")"; pwd)

效果:

+++ dirname ./install_kylin.sh
++ cd .
++ pwd
 
2017-07-22 19:36:02 Lockey23 阅读数 1007
  • Linux shell脚本习题

    Shell脚本是Linux运维、自动化运维体系中不可或缺的一个非常重要的部分,几乎所有的招聘需求中都会要求会写Shell脚本。 很多人都觉得Shell脚本不会写,写不出来。这就是因为练习不够。体系课程一共包含100道Shell习题,只要你全部学完这100道题,相信你的Shell脚本能力会有大幅度提升。

    420 人正在学习 去看看 李世明

日志转储

假设目前有两台主机:

server发送日志
client(lockey)接受日志并对日志进行处理

1.发送方的日志系统配置

  • vim /etc/rsyslog.conf
    在文件中包含 RULES 关键字的部分或者文件尾部添加以下内容

    *.*  @172.25.254.236
    
    *.*表示所有类型的所有级别的日志
    @172.25.254.236表示将日志通过UDP协议转储到主机172.25.254.236中
    
  • 重新启动日志系统服务

    systemctl restart rsyslog
    

2.接受方的日志系统配置

  • vim /etc/rsyslog.conf

    #Provides UDP syslog reception,
    $ModLoad imudp
    #表示开启日志接受的插件
    $UDPServerRun 514
    表示日志接受的UDP端口
    
  • 关闭系统的防火墙设置或者让日志转发服务能够通过

    systemctl stop firewalld
    #关闭防火墙
    
  • 重新启动日志系统服务

    systemctl restart rsyslog
    #关闭之后确认一下防火墙的状态
    

这里写图片描述

3.在发送方产生日志,监控接收方的接收情况,可以看到当发送方产生一条日志的时候,接收方就会显示出来

日志监控的命令:
tail -f /var/log/message

这里写图片描述

配置针对不同类型日志要运行的脚本程序

本示例脚本运行在接收端,即转储的日志也可以触发脚本事件,当然本机日志也是可以的

基本配置

*.* ^脚本的路径  #格式

示例配置
##表示对于产生的local3类型的所有级别的日志运行/tmp/log.sh脚本
local3.*    ^/tmp/log.sh        # ^号后跟可执行脚本或程序的绝对路径
                # 日志内容可以作为脚本的第一个参数.
                #  可用来触发报警

这里写图片描述

#!/bin/bash

if [ -f /tmp/test.txt ]
then
echo 'file exist' >>/tmp/test.txt
sed '/root/w /tmp/test.txt' /var/log/messages
else
touch /tmp/test.txt
fi
##脚本的作用是如果产生了一个local3类型的日志就判断是否存在文件test.txt,如果不存在则创建,如果存在则过滤出日志中含有root关键字的行保存到 /tmp/test.txt中

运行结果

1.当我们产生普通日志时只显示日志信息,脚本并没有执行;

当我生成一个local3.info日志时脚本执行,创建了一个名为test.txt的文件,接下来我们监控文件内容变化
这里写图片描述

2.监控生成的文件内容被脚本改变

tail -f test.txt

这里写图片描述

从上边的结果我们可以看到当脚本创建了文件之后如果继续产生local3.info日志,日志信息就会被过滤写入test.txt中去

2019-09-22 10:46:07 strive_or_die 阅读数 1044
  • Linux shell脚本习题

    Shell脚本是Linux运维、自动化运维体系中不可或缺的一个非常重要的部分,几乎所有的招聘需求中都会要求会写Shell脚本。 很多人都觉得Shell脚本不会写,写不出来。这就是因为练习不够。体系课程一共包含100道Shell习题,只要你全部学完这100道题,相信你的Shell脚本能力会有大幅度提升。

    420 人正在学习 去看看 李世明

Linux下shell脚本实现记录日志

  最近写了shell脚本,有个基于jacoco调用的从指定Tomcat中自动生成覆盖报告文件到指定的Nginx目录中的脚本,Tomcat下有多个项目,这个脚本是后台跑的,而且是开了定时任务跑的。想着记录一些日志,方便知道脚本的运行状态,也方便排查。

shell记录日志的代码

#!/bin/bash
#定义日志的根目录
logDir=/var/log/
echo $logDir
#日志路径和文件
logFileName="$logDir/log.out"  
#文件大小这里以行数来计算
fsize=2000000     

#log函数,接收两个参数:level 日志级别,content 日志内容
#level: INFO ,WARN,ERROR
#content: log info
function log(){
  #judge the params,it must 2 params;
   if [ 2 -gt $# ]
   then
     echo  "WARN parameter not correct in log function"
     return;
   fi
   #如果日志的根目录不存在,则应该先创建
   if [ ! -d $logDir ];then
      mkdir -p $logDir
   fi
   #判断日志文件是否存在,不存在则创建
   if [ ! -e "$logFileName" ];then
     touch $logFileName
   fi
   #日志时间
   local curtime
   curtime=`date +"%Y%m%d%H%M%S"`
   #判断日志的大小,然后如果对于指定的行数,则应该备份旧的日志文件,然后创建新的日志文件
   local cursize
   if [ ! -e "$logFileName" ];then
     echo "There is no log file!Not record log to file!"
     return
   fi
   # 计算现有的日志文件的行数
   cursize=`cat $logFileName | wc -c`
   if [ $fsize -lt $cursize ];then
     echo "backup old log file"
     # 备份文件名为:日期.log
     mv $logFileName $curtime".log"
     # 创建新的日志文件
     touch $logFileName
   fi  
   # 打印控制台日志和记录日志到文件
   echo "$curtime $*"
   echo "$curtime $*" | tee -a $logFileName
}

总结

  这个日志文件主要是记录我们在脚本中自己主动输出的日志,对于我们调用其他脚本的日志的错误和信息,该怎么写入到我们自定的日志文件中是个问题。例如:在我们的脚本中执行指定Tomcat的sh startup.sh,启动tomcat时startup.sh报的错,那该怎么打印到我们指定的日志文件了。如果有错误,欢迎大家指正。

2019-06-10 08:55:05 ymeng9527 阅读数 178
  • Linux shell脚本习题

    Shell脚本是Linux运维、自动化运维体系中不可或缺的一个非常重要的部分,几乎所有的招聘需求中都会要求会写Shell脚本。 很多人都觉得Shell脚本不会写,写不出来。这就是因为练习不够。体系课程一共包含100道Shell习题,只要你全部学完这100道题,相信你的Shell脚本能力会有大幅度提升。

    420 人正在学习 去看看 李世明

建立脚本clear_log.sh,执行这个脚本之后可以自动清空日志

日志类型在/etc/rsyslog.conf这个文件当中

思路:
(1)先将所有的日志类型过滤出来指定到一个文件当中
(2)然后计算日志的个数,并且赋值给一个变量名
(3)使用for循环一一清空每个日志,循环的次数就是上述统计出来的行数

在这里插入图片描述
在这里插入图片描述
man grep
在这里插入图片描述
在这里插入图片描述
sed -n “$=” /etc/rsyslog.conf 查看这个文件有多少行

在这里插入图片描述
grep RULES /etc/rsyslog.conf -A 91 将所有的都输出来
在这里插入图片描述
grep RULES /etc/rsyslog.conf -A 91 | sed -n '/^#/!p’以#开头的行不要
在这里插入图片描述
grep RULES /etc/rsyslog.conf -A 91 | awk '!/^#/{print}'以#开头的行不要
在这里插入图片描述

grep RULES /etc/rsyslog.conf -A 91 | awk '!/^#/&&!/^$/{print}'去掉空行

在这里插入图片描述

grep RULES /etc/rsyslog.conf -A 91 | awk '!/^#/&&!/^$/{print $2}'只要第二列

在这里插入图片描述

grep RULES /etc/rsyslog.conf -A 91 | awk '!/^#/&&!/^$/{print $2}' | sed 's/-//g'去掉-
grep RULES /etc/rsyslog.conf -A 91 | awk '!/^#/&&!/^$/{print $2}' | sed '/^:/d;s/-//g'去掉以:开头的

在这里插入图片描述

grep RULES /etc/rsyslog.conf -A `sed` -n '$=' /etc/rsyslog.conf | awk '!/^#/&&!/^$/{print $2}' | sed '/^:/d;s/-//g'整体命令

在这里插入图片描述
接下来编写脚本:要使用for循环
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意,将脚本放在/mnt下面进行实验,如果放在root的家目录下面,student根本就看不到脚本

没有更多推荐了,返回首页