shell脚本实现Linux日志服务配置Edition 2
来源:互联网 发布:银行后台数据录入员 编辑:程序博客网 时间:2024/06/10 14:32
昨天刚才发表了shell脚本实现Linux日志服务配置Edition 1这篇博文
只过了一天第二个版本就已经诞生了!!!
本次改进:
代码量少了,比如像主机类型的选择等操作并入了参数中流程控制更加清晰有了一定的错误处理,用户更友好
其实这也很符合写程序的实际情况,首先可能要求是实现功能,然后就得精简代码、严谨逻辑并且提升程序性能。也不是懒得去修改上一篇博客,而是为了留下对比,没有今夕的对比怎么体现成长呢?当然所谓的成长对于程序员来说就是编程或者专业技能的提升这么回事。
不要管前面我说了什么,你是来看代码的吧
那么,上脚本
注:此脚本在redhat7.2上完全运行通过,对于其他类型Linux系统或者redhat其他版本差异请自寻!
此shell脚本实现的功能(包含客户端和服务器端)
- Linux日志转储
- Linux日志时间同步
- Linux日志处理的脚本以及针对性设置
- 时区设置
- 日志相关服务的停启
#!/bin/bash#首先,我将在脚本开始给出一个友好的欢迎界面,此出于用户体验的考虑(我曾经可是一名web偏前端工程师啊)echo '-------------------------------------------------------------------------'echo '. .'echo '. Welcome to rsyslogd service setting .'echo '. .'echo '-------------------------------------------------------------------------'#因为要对配置文件进行修改,所以先备份一下以防搞坏配置cp /etc/rsyslog.conf /etc/rsyslog.conf.bak#下面是对于各选项以及对应的操作的菜单 echo -e "\n" echo ' ** Options for log service settings **' echo '.' echo '. 0. Quit the script' echo '. 1. Setting log information dump' echo '. 2. Create a shell script to deal with specific log information' echo '. 3. Record your log to normal file or device' echo '. 4. Set user(s) to receive your log information' echo '. 5. Discard some type or level log information' echo '. 6. Set log collection format' echo '. 7. Set time sync' echo '. 8. Set timezone' echo '. 9. Set utc time(0|1)' echo '. 10. Restart rsyslog service' echo '. 11. Stop firewalld service' echo '. 12. restart chronyd service' echo '.' echo ' *********************************************'#初始化一个条件参数让程序顺利进入循环读取操作optionNum=100until [ $optionNum = 0 ]#进入until流程控制,结束条件是菜单选项为 : 0 do echo -e "\n" read -p 'Please input your choice as number(0 to quit): ' optionNum echo -e "\n" case $optionNum in #进入case流程控制,用来对用户的各种非脚本退出选择进行相应的操作 0) break;; #退出条件 1) echo 'Please input your host type with setting items' echo 'eg(for server):server udp' echo 'eg(for client):client ip-udp' read hosttype protocol if [ $hosttype = 'client' ] then echo 'You choose to set your host as Client!!' ip=`echo ${protocol%%-*}` proto=`echo ${protocol:0-3}` promark='@' if [ $proto = 'udp' ] then echo 'You protocol type is udp!' elif [ $proto = 'tcp' ] then promark='@@' echo 'You protocol type is tcp!' else echo 'protocol type not match the option(udp or tcp)!' continue #跳过接下来要执行的操作,返回用户菜单选择 fi sed "/RULES/a *.* ${promark}${ip}" -i /etc/rsyslog.conf elif [ $hosttype = 'server' ] then echo 'You choose to set your host as Server!!' if [ $protocol = 'udp' ] then sed -e 's/#$ModLoad imudp/$ModLoad imudp/; s/#$UDPServerRun/$UDPServerRun/' -i /etc/rsyslog.conf elif [ $protocol = 'tcp' ] then sed -e 's/#$ModLoad imtcp/$ModLoad imtcp/; s/#$InputTCPServerRun/$InputTCPServerRun/' -i /etc/rsyslog.conf else echo 'Wrong protocol type!' continue fi else echo 'Host type not match the option(server or client)!' continue fi echo '-----' echo 'TIps: Please restart related service while your rightly configured!' echo '-----';; 2) read -p 'please input your log type with level(eg:local3.*) and script location with file name(eg:/var/log/logscript.sh): ' loglevel scriptLocation sed "/local7/a ${loglevel} ^${scriptLocation}" -i /etc/rsyslog.conf touch $scriptLocation chmod +x $scriptLocation ;; 3) echo 'eg:*.* /var/log/file.log # 普通文件,绝对路径' echo 'eg:*.* /dev/pts/0 #设备文件' read -p 'Please input your log with level and file path: ' loglevel path sed "/#kern.*/a ${loglevel} ${path}" -i /etc/rsyslog.conf ;; 4) echo 'eg:*.* root' echo 'eg:*.* root,kadefor,up01 # 使用,号分隔多个用户' echo 'eg:*.* * # *号表示所有在线用户' read -p 'Set user(s) to receive your log information: ' loglevel user sed "/#kern.*/a ${loglevel} ${user}" -i /etc/rsyslog.conf ;; 5) echo 'eg:local3.* # 忽略所有local3类型的所有级别的日志' read -p 'Discard some type or level log information: ' discard sed "/#kern.*/a ${discard} ~" -i /etc/rsyslog.conf ;; 6) echo 'eg:WESTOS %timegenerated% %FROMHOST-IP% %syslogtag% %msg%' read -p 'Set log collection name and format: ' name format1 format2 format3 format4 sed "/RULES/a \$template ${name}, '${format1} ${format2} ${format3} ${format4}huanhang'" -i /etc/rsyslog.conf sed 's/huanhang/\\n/g' -i /etc/rsyslog.conf echo '*.info;mail.none;authpriv.none;cron.none /var/log/messages;WESTOS' read -p 'Set log type with level and apply: ' apply1 apply2 sed "/\$template/a ${apply1} ${apply2}" -i /etc/rsyslog.conf ;; 7) echo 'Please input your host type with setting items' echo 'eg(for client):client 8.8.8.8' echo 'eg(for server):server 172.25.0.0/16' read hosttype hostip if [ $hosttype = 'client' ] then sed "/www.pool.ntp.org/a server ${hostip} iburst" -i /etc/chrony.conf elif [ $hosttype = 'server' ] then echo '-----' echo 'Please confirm chrony service installed!' echo '-----' sed "/.rhel.pool.ntp.org/d; /Allow NTP/a allow ${hostip}" -i /etc/chrony.conf sed '/local stratum/a local stratum 10' -i >/etc/chrony.conf else echo 'Host type not match the option(server or client)!' continue fi echo '-----' echo 'TIps: Please restart related service while your rightly configured!' echo '-----' ;; 8) read -p 'Plese input timezone to set(eg:Asia/Shanghai): ' timezone timedatectl set-timezone $timezone ;; 9) read -p 'Plese input utc flag(0/1): ' flag timedatectl set-local-rtc $flag ;; 10) systemctl restart rsyslog echo 'rsyslog restarted!' ;; 11) systemctl stop firewalld systemctl disable firewalld echo 'firewalld stopped!' ;; 12) systemctl restart chronyd echo 'chronyd restarted!' ;; *) echo 'Option not match any(0-12)!!!' continue #对于用户的非0非正确输入进行提醒并重新进入菜单选择 ;; esac done#用户选择退出选项,脚本退出echo 'The script exited!'
首先我们来看一下初始界面
然后来看一下此脚本对于用户输入的错误处理
下图为操作11和12的直观感受,可以看到命令执行之后有了相应的结果
chronyd服务重启firewalld服务关闭
下图为操作9和10的直观感受,可以看到命令执行之后有了相应的结果
rsyslogd服务重启RTC设置生效
下图为操作7直观感受,可以看到客户端的时间和服务端进行了同步
下图为操作6直观感受,日志同步格式写入了配置文件
下图为操作345直观感受,日志同步格式写入了配置文件
下图为操作1直观感受,作为服务器的主机配置写入成功,开启了udp接收端口
下图为操作8直观感受,前面的操作中时区都是美国,现在我们将时区改成了亚洲/上海(Asia/Shanghai)
阅读全文
1 0
- shell脚本实现Linux日志服务配置Edition 2
- linux防火墙配置shell脚本
- shell脚本实现分日志级别输出
- shell脚本日志的简单实现
- shell脚本实现分日志级别输出
- linux+shell+脚本+过滤NetScreen防火墙日志
- linux shell脚本 -- 定时任务--备份日志
- linux shell脚本 -- 定时任务--备份日志
- linux shell脚本 -- 定时任务--备份日志
- Linux shell脚本输出日志笔记整理
- linux 定期删除spark日志 shell 脚本
- linux清空日志shell脚本
- linux清除tomcat日志文件Shell脚本
- 【Linux】shell脚本实现进度条
- linux 实现shell睡眠脚本
- linux Web服务程序监控shell脚本
- Linux shell实现HTTP服务
- linux shell 脚本自动从配置远程ftp服务上下载更新文件
- 堆or优先队列(洛谷1801 黑匣子_NOI导刊2010提高(06))
- Python 模块搜索路径
- 求全排列的数学方法(洛谷1088 火星人noip2004普及组第4题)
- 全排列(洛谷1061 Jam的计数法or NOIP 2006 普及组 第三题)
- 快速幂+分治(洛谷P1045 麦森数 noip2003)
- shell脚本实现Linux日志服务配置Edition 2
- 模拟(洛谷1403 [AHOI2005]约数研究)
- Nginx配置子域名
- 小知识备忘
- JavaScript switch语句和调试程序
- isap最大流
- CodeForces
- 高斯求和等差数列前缀和(洛谷1147 连续自然数和)
- 数学方法模拟(洛谷1017 进制转换NOIp2000提高组第一题)