shell脚本实现Linux日志服务配置Edition 2
2017-07-27 20:36
495 查看
昨天刚才发表了shell脚本实现Linux日志服务配置Edition 1这篇博文
其实这也很符合写程序的实际情况,首先可能要求是实现功能,然后就得精简代码、严谨逻辑并且提升程序性能。也不是懒得去修改上一篇博客,而是为了留下对比,没有今夕的对比怎么体现成长呢?当然所谓的成长对于程序员来说就是编程或者专业技能的提升这么回事。
Linux日志时间同步
Linux日志处理的脚本以及针对性设置
时区设置
日志相关服务的停启
只过了一天第二个版本就已经诞生了!!!
本次改进:代码量少了,比如像主机类型的选择等操作并入了参数中 流程控制更加清晰 有了一定的错误处理,用户更友好
其实这也很符合写程序的实际情况,首先可能要求是实现功能,然后就得精简代码、严谨逻辑并且提升程序性能。也不是懒得去修改上一篇博客,而是为了留下对比,没有今夕的对比怎么体现成长呢?当然所谓的成长对于程序员来说就是编程或者专业技能的提升这么回事。
不要管前面我说了什么,你是来看代码的吧
那么,上脚本
注:此脚本在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=100 until [ $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)
相关文章推荐
- [置顶] 编写shell脚本以及利用函数实现批量安装Linux服务配置
- Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题
- linux利用shell脚本和cron实现定时备份、上传及垃圾日志清理(原创)
- shell脚本实现从master节点批量配置salve节点(主机名有瑕疵,IP映射,ssh服务)
- shell脚本实现Linux ip的配置(增删改查)以及相关信息查看
- linux环境下编写shell脚本实现启动停止tomcat服务的方法
- Linux基础之-利用shell脚本实现自动监控系统服务
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
- Linux基础之-利用shell脚本实现自动监控系统服务
- shell脚本实现nfs服务安装配置,共享文件分发
- linux利用shell脚本和cron实现定时备份、上传及垃圾日志清理(原创)
- 脚本自动实现DNS服务各区域配置文件
- Linux使用Shell脚本实现ftp的自动上传下载
- 用tarball实现liferay自动安装部署12-配置脚本执行日志
- 使用linux的shell脚本实现在当前行重复动态显示时间等字符串信息(不另起新行)
- 用Shell脚本实现自动化完成属于自己的微型Linux!(二)
- 【Linux学习】配置环境:实现【VirtualBox + ubuntu】+【开启ssh服务】+【putty远程连接到虚拟机】
- 关于redhat下配置samba服务实现linux和window共享
- linux+shell+脚本+过滤NetScreen防火墙日志
- 用Shell脚本实现自动化完成属于自己的微型Linux!(二)