一.日志文件
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编程笔记(日志文件、信号、trap捕捉信号、eval),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://hi.baidu.com/apple_ynn/item/e7370ebbba0149c285dd7971
Shell编程笔记(日志文件、信号、trap捕捉信号、eval)
#Shell
这篇关于Shell编程笔记(日志文件、信号、trap捕捉信号、eval)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!