Shell编程笔记(日志文件、信号、trap捕捉信号、eval)

2023-10-14 23:08

本文主要是介绍Shell编程笔记(日志文件、信号、trap捕捉信号、eval),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://hi.baidu.com/apple_ynn/item/e7370ebbba0149c285dd7971


Shell编程笔记(日志文件、信号、trap捕捉信号、eval)

一.日志文件
1.创建日志文件的重要性:
记录重要的信息,如登录、运行情况、监控等。。为我们分析和排除错误非常有帮助
2.以时间为标识的日志文件
适用于长期存储的日志。举个创建以时间为标识日志的例子入下:
#!/bin/bash
#datelog.sh
current_date=`date ""+%Y%m%d` #当前的日期( 年月日 )
todaylog="log/${current_date}.log" #今天的日志文件名
#如果日志文件不存在,创建一个
if [ ! -f $todaylog ]
then
touch $todaylog
fi
#输出日志到日志文件
log_time_format=`date "+%Y-%m-%d %T"`
echo "${log_time_format} commands start.....">>${todaylog}
# commands blocks
sleep 4
log_time_format=`date "+%Y-%m-%d %T"`
echo "${log_time_format} commands end!">>${todaylog} #结束时记录日志
3.以进程号为标识的临时文件
一般记录脚本运行过程中需要暂时记录的信息,一旦脚本运行结束,这些信息就可以删除。举个以进程号为标识的日志的例子:
#!/bin/bash
#kill_process.sh
#取得当前进程号
current_pid=$$
#获得特定进程号并重定向到一个临时文件中
ps -aux|grep "/usr/sbin/httpd" | grep -v "grep"| awk '{print $2}' >/tmp/${current_pid}.txt
#commands start
for pid in `cat /tmp/${current_pid}.txt
do
{
echo "kill -9 $pid"
kill -9 $pid
}
done
rm -f /tmp/${current_pid}.txt //脚本运行结束前删除该日志文件

二.信号
(1). 信号就是系统向脚本或命令发出的消息,告知它们某个事情的发生。
(2). kill -l 列出所有的信号
(3). kill发送信号给进程
(4). 一些信号的含义:
信号 信号名 含义
0 退出shell信号,可以从命令行输入exit或在一个进程或命令行中使用<CTRL-d>
1 SIGHUP 挂起或父进程被杀死
2 SIGINT 来自键盘的中断信号,通常是<CTRL-C>
3 SIGOUIT 从键盘退出
9 SIGKILL 无条件终止
11 SIGSEGV 段(内存)冲突
15 SIGTERM 软件终止(缺省杀进程)
(另外还有50多种信号,可以用kill -l 命令查看)
(5). 举例说明:kill -s SIGKILL 1234 表示无条件终止进程1234(进程号)
通过kill -9 1234 其含义与上面一样。
   kill -1 1234 和kill -s SIGHUP 1234都是挂起 进程号为1234的进程
  
三.trap捕捉信号
   (1)信号可以被应用程序或脚本捕获,并依据该信号(1、2、3和15)采取相应的行动。一些信号不能被捕获。如,如果一个命令收到了信号9,就无法再捕获其他信号。
   (2)捕捉到一个信号后,可能会采取三中
     1].不采取任何行动,由系统来进行处理(如信号9由系统处理)
     2].捕获该信号,但忽略它
     3].捕获该信号,并采取相应的行动
   (3)trap可以使你在脚本中捕捉信号,命令形式为trap name signal(s)
其中,name是捕捉到信号以后所采取的一系列操作。实际中,name一般是一个专门用来处理所捕捉信号的函数。name需要用双引号(“”)引起来。signal是待捕捉的信号。
      最常见的行动包括:
     1]清除临时文件
     2]忽略该信号(如trap "" 23)
3]询问用户是否终止该脚本进程
   (4)举例说明:
     #!/bin/bash
#trap.sh
trap 'exitprocess' 2    #捕捉到信号2之后执行exitprocess function
LOOP=0
function exitprocess()
{
echo "You Just hit <CTRL-C>, at number $LOOP"
echo "I will now exit"
exit 1
}
while : # 循环直到捕捉到信号(注意中间的空格)
do
LOOP=$[ $LOOP+1 ]
echo $LOOP
         sleep 1
done
     
四.eval
(1)eval命令首先会扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。
 (2)举例:myfile="cat command.txt";`eval $myfile` 将会执行command.txt中的命令,如,若command.txt文件的内容是ls -al 则会执行该命令(一行行执行),若不是命令则提示出错信息。
五.logger
 (1)logger命令向/var/log/messages文件发送信息
 (2)logger命令的一般形式: logger -p -i message
-p:为优先级别,这里只涉及到提示用户注意的优先级,这也是缺省值
    -i:在每个消息中记录发送消息的进程号
 (3)举例说明:logger -p 5 -i "hello" 将“hello”记录到/var/log/messages中

#Shell


这篇关于Shell编程笔记(日志文件、信号、trap捕捉信号、eval)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/213742

相关文章

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!