将shell脚本运行情况写入Rsyslog日志server
在运维工作中,免不了编写一些脚本交由计划任务(cron)去定时运行完毕一些日常工作,实现运维工作自己主动化。比方在我的日常工作中备份数据是一项重要的工作,须要定时将数据备份到备份服器和一些其它的备份介质中。
其中大部分的备份工作都是写到脚本其中,并编辑/etc/crontab去定时完毕备份任务。这样节省了不少日常工作的压力。
为了监控脚本的运行情况。在编写脚本的时候将运行情况的情况追加写入到本地指定的日志文件其中,定期去查看这些文件来确保任务被正确的运行。
可是,随着须要备份的server的增多,运行查看日志的工作就变成了一种负担。一般是须要逐个登录每台server去检查日志文件。
为了解决上述问题,我打算将全部的备份日志写入到一台备份server其中,这样就能够实现日志的集中收集管理和查看了。
为些我在前几天搭建了一台日志server用来收集每台server的日志信息(请參见:Centos6.7搭建Rsyslog日志server)。
日志server也搭建完了。问题也出现了,怎样将脚本中的运行情况写入到日志server中呢?事实上。因为日志server已经搭建完毕,仅仅须要将须要记录信息写入到本地日志系统,那么本地rsyslog服务就会将日志信息同一时候写入到远端的日志server数据库中。
将自己定义的信息写入到本地日志系统须要用到:logger 命令
logger 是一个shell 命令接口。能够通过该接口使用Syslog的系统日志模块,还能够从命令行直接向系统日志文件写入一行信息。
用法举例:
logger -it error -p local5.info "hello world"
-i 在每行都记录进程ID
-t 日志中的每一行都加一个error标签
-p 指定自己定义的日志设备和日志级别。相关内容參见文章附录
最后一个參数中的双引號(“”)中的文本内容就是自己定义日志信息。在脚本中针对命令的运行结果(echo $?
)进行if推断,然后使用logger输出不同的日志信息就可以。如:
umount -l /mnt
if [ `echo $?` -eq 0 ]; then
logger -p local3.info "Umount /dev/sdd1 is OK!"
else
logger -p local3.err "Umount /dev/sdd1 is Failure!"
fi
上面的脚本是卸载U盘或者移动硬盘时用到的角本。
依据 echo $? 的返回值,将 info 或者 err级别的自己定义日志信息写入到系统日志中。
配合Rsyslogserver使用就能够实现shell脚本运行情况的集中收集与管理了。
附:日志类型和日志级别
日志类型
日志类型 | 说明 |
---|---|
auth | pam产生的日志 |
authpriv | ssh,ftp等登录信息的验证信息 |
cron | 时间任务相关 |
kern | 内核 |
lpr | 打印 |
邮件 | |
mark(syslog) | rsyslog服务内部的信息,时间标识 |
news | 新闻组 |
user | 用户程序产生的相关信息 |
uucp | unix to unix copy, unix主机之间相关的通讯 |
local1~7 | 自己定义的日志设备 |
日志级别
从上到下。级别从低到高,记录的信息越来越少 具体的能够查看手冊: man 3 syslog
级别 | 说明 | 级别值 |
---|---|---|
debug | 有调式信息的,日志信息最多 | 7 |
info | 一般信息的日志,最经常使用 | |
notice | 最具有重要性的普通条件的信息 | |
warning | 警告级别 | 4 |
err | 错误级别,阻止某个功能或者模块不能正常工作的信息 | |
crit | 严重级别,阻止整个系统或者整个软件不能正常工作的信息 | |
alert | 须要立马改动的信息 | |
emerg | 内核崩溃等严重信息 | |
none | 什么都不记录 |
将shell脚本运行情况写入Rsyslog日志server的更多相关文章
- Linux下Shell脚本运行程序不输出日志到终端
使用: 脚本路径/脚本名 >/dev/>& 说明: 可以简单的理解/dev/null是Linux下的回收站 >默认是把标准输出重定向 2>&1是把出错输出也定向 ...
- IDEA部署项目,并结合Shell脚本运行Java程序
一.概述 在实际开发中,我们写好的代码,往往打成war包或jar包,通过winscp或其他软件将其上传至服务器,然而这样非常大的一个弊端就是不利于开发,为什么这么说呢?假如我们刚刚将springboo ...
- 基于sparksql调用shell脚本运行SQL
[Author]: kwu 基于sparksql调用shell脚本运行SQL,sparksql提供了类似hive中的 -e , -f ,-i的选项 1.定时调用脚本 #!/bin/sh # uplo ...
- 利用shell脚本实现nginx 的logs日志分割
Nginx 是一个非常轻量的 Web 服务器,体积小.性能高.速度快等诸多优点.但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量 ...
- SHELL脚本运行的几种方法以及区别
#1 给脚本加上执行权限chmod u+x a.sh, 而后就可以直接用全路径来执行脚本了,比如当前文件夹下用./a.sh,如果如果脚本所在目录在PATH环境变量之中, 则直接用a.sh即可(这和运行 ...
- Ubuntu下shell脚本运行异常:bash和dash的区别
Ubuntu下我用bash到语法写了一个shell脚本(准确的说是把书上的脚本敲进电脑),在ubuntu下,用sh test.sh来运行,但是出现了意料之外到结果,比如echo -e "\n ...
- shell脚本运行java程序jar
在UBuntu上部署项目的时候,我们往往通过一段shell来启动程序,甚至是通过crontab定时任务来定时的调用java程序,但是很奇怪的一个问题就是,比如我写了一个如下的shell脚本: #!/b ...
- buntu下shell脚本运行异常:bash和…
转载于:http://www.51testing.com/?uid-225738-action-viewspace-itemid-208702 我用bash到语法写了一个shell脚本(准确的说是把书 ...
- Shell脚本运行报错Bad substitution解决办法
环境Ubuntu18.4.02 脚本运行报错 # sh test.sh test.sh: 2: test.sh: Bad substitution 原因 从 ubuntu 6.10 开始,ubuntu ...
随机推荐
- [NOIP2012提高组]开车旅行
题目:洛谷P1081.Vijos P1780.codevs1199. 题目大意:有n座海拔高度不相同的城市(编号1~n),两城市的距离就是两城市海拔之差.规定每次只能从编号小的城市走到编号大的城市. ...
- HDU3001 Traveling (状压dp+三进制+Tsp问题总结)
(1)这道题最多可以走两次,所以有0, 1, 2三种状态,所以我们要用三进制 如果要用三进制,就要自己初始化两个数组, 一个是3的n次方,一个是三进制数的第几位的数字是什么 void init() { ...
- JS DOM 实例(5大常用实例)
第1个实例:循环单击变色 <html lang="en"> <head> <meta charset="UTF-8"> &l ...
- 洛谷 P2393 yyy loves Maths II
P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yy ...
- Android仿QQ ios dialog,仿QQ退出向上菜单
Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自己定义向上菜单 github地址:https://gith ...
- HDU 4324 Contest 3
直接DFS即可 #include <iostream> #include <string.h> #include <algorithm> #include < ...
- what's new in vc2015
1. 变量和函数的注解提示非常实用.象C#了. 2.CStdioFile升级了,不再须要象 vc2013中,用CStdioFileEx来修复错误了. 3. 发现再写.
- 使用docker搭建hadoop分布式集群
使用docker搭建部署hadoop分布式集群 在网上找了非常长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,仅仅能自己写一个了. 一:环境准备: 1:首先要有一个Cento ...
- [windows+cocos2dx]CCSprite精灵类
序言 回想cocos2dx,之前在mac+Xcode平台学习了一遍cocos2dx,一年时间不接触cocos了.一直在搞Unity3d.如今还是就之前所学温故温故,但不再用Xcode来写.用经常使用的 ...
- win10+ubuntu双系统卸载ubuntu
进入win10下载EasyUEFI,删除ubuntu的引导项.重启如果直接进入了win10,表示卸载成功了.然后可以格式化ubuntu的分区.