shell脚本临时文件生成和使用,信号捕捉

实例:生成临时文件记录apache进程号,杀死apache进程,删除临时文件

  1 #!/bin/bash
  2 #create_log.sh
  3
  4 #1.获取到所有httpd应用程序的进程号
  5 #2.把进程号存入一个临时文件中
  6 #3.从临时文件中取出所有的apache的进程号
  7 #4.使用for循环用kill杀掉所有的httpd进程
  8 #5.删除之前生成的临时文件
  9 #6.输出关闭进程后的消息
 10 #$$当前程序运行时候开辟的pid
 11
 12 tmpfile=$$.txt
 13
 14 ps -e | grep httpd | awk ‘{print $1}‘ >>$tmpfile
 15
 16 for pid in `cat $tmpfile`
 17 do
 18         echo "apache ${pid} is killed!!!"
 19         kill -9 $pid
 20 done
 21
 22 sleep 1
 23
 24 rm -rf $tmpfile
 25 echo "apache 已经成功被关闭"

[[email protected] shell_test]# /etc/init.d/httpd restart

Stopping httpd: [ OK ]
Starting httpd: httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]

[[email protected] shell_test]# ps -e | grep httpd

78797 ? 00:00:00 httpd
78800 ? 00:00:00 httpd
78801 ? 00:00:00 httpd
78802 ? 00:00:00 httpd
78803 ? 00:00:00 httpd
78804 ? 00:00:00 httpd
78805 ? 00:00:00 httpd
78806 ? 00:00:00 httpd
78807 ? 00:00:00 httpd

[[email protected] shell_test]# sh create_log.sh

apache 78797 is killed!!!
apache 78800 is killed!!!
apache 78801 is killed!!!
apache 78802 is killed!!!
apache 78803 is killed!!!
apache 78804 is killed!!!
apache 78805 is killed!!!
apache 78806 is killed!!!
apache 78807 is killed!!!
apache 已经成功被关闭

[[email protected] shell_test]# ps -e | grep httpd
[[email protected] shell_test]#

信号类型

linux中一共有64种信号

[[email protected] shell_test]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

SIGHUP :挂起进程【1】  重载配置文件:kill -HUP +进程号 , kill -1 , pkill -HUP + 进程名字

SIGINT :来自键盘的中断ctrl+c【2】

SIGQUIT :从键盘退出ctrl+\【3】

SIGKILL :无条件终止【9】

Trap信号捕捉

捕捉到一个信号后,它可能会采取下面三种操作之一:

1.不采取任何行动,由系统来处理

2.捕捉信号,但忽略它

3.捕捉该信号,但采取相应的行动

Trap命令使用:

trap "function" signal

1)signal为接受到的信号

2)function为执行函数(动作)

常见行动:

  1)清除临时文件

  2)忽略该信号

  3)询问用户是否终止脚本执行

trap信号捕捉

1 #!/bin/bash
2 #signal.sh
3 #信号捕捉
4
5 trap ‘myfunc‘ 2
6
7 function myfunc(){
8    echo ‘你正在按ctrl+c键,程序无法终止‘
9 }
10
11 i=0
12
13 while :
14 do
15    let i++
16    echo $i
17   sleep 1
18 done

[[email protected] shell_test]# sh signal.sh
1
2
3
4
5
6
7
^C你正在按ctrl+c键,程序无法终止
8
9
^C你正在按ctrl+c键,程序无法终止
10
11
12
^C你正在按ctrl+c键,程序无法终止
13
14
^C你正在按ctrl+c键,程序无法终止
15
^C你正在按ctrl+c键,程序无法终止
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Killed

在开启一个窗口,杀死脚本进程,以终止

Last login: Sat Apr 15 02:27:19 2017 from 172.30.1.21
[[email protected] ~]# ps -ef | grep signal
root 260 2 0 Apr14 ? 00:00:00 [scsi_eh_0]
root 261 2 0 Apr14 ? 00:00:00 [scsi_eh_1]
root 284 2 0 Apr14 ? 00:00:00 [scsi_eh_2]
root 1472 1 0 Apr14 ? 00:00:01 /usr/sbin/vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permissions,allow_other /var/run/vmblock-fuse
root 2849 2767 0 Apr14 ? 00:00:00 /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
gdm 2958 1 0 Apr14 ? 00:00:00 /usr/bin/dbus-launch --exit-with-session
root 3131 3021 0 Apr14 ? 00:00:00 gnome-session
root 3139 1 0 Apr14 ? 00:00:00 dbus-launch --sh-syntax --exit-with-session
root 3140 1 0 Apr14 ? 00:00:00 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
zabbix 72407 72387 0 01:25 ? 00:00:00 /usr/local/zabbix/sbin/zabbix_server: housekeeper [deleted 0 hist/trends, 0 items, 0 events, 0 sessions, 0 alarms, 0 audit items in 0.002925 sec, idle for 1 hour(s)]
root 80834 4904 0 03:30 pts/0 00:00:00 sh signal.sh
root 80872 80807 0 03:30 pts/2 00:00:00 grep signal

[[email protected] ~]# kill -9 80834

trap信号捕捉升级版

 1 #!/bin/bash
 2 #signal.sh
 3 #信号捕捉
 4 #与用户进行交互
 5
 6 trap ‘myfunc‘ 2
 7
 8 function myfunc(){
 9   read -p ‘您确定终止该进程吗? yes or no:‘ s
10
11   case $s in
12     ‘yes‘)
13       exit
14       ;;
15     ‘no‘)
16       ;;
17     *)
18       myfunc
19       ;;
20
21   esac
22 }
23
24 i=0
25
26 while :
27 do
28   let i++
29   echo $i
30   sleep 1
31 done

选择yes直接终止

[[email protected] shell_test]# sh signal.sh
1
2
3
^C您确定终止该进程吗? yes or no:yes

选择no继续往下走,选择其他,调用函数,继续提示是否终止进程

[[email protected] shell_test]# sh signal.sh
1
2
^C您确定终止该进程吗? yes or no:no
3
4
5
6
^C您确定终止该进程吗? yes or no:1
您确定终止该进程吗? yes or no:2
您确定终止该进程吗? yes or no:3
您确定终止该进程吗? yes or no:yes
[[email protected] shell_test]#

时间: 2024-12-25 20:21:14

shell脚本临时文件生成和使用,信号捕捉的相关文章

shell脚本批量生成配置文件

如果管理的站点和服务器较多的情况下,每次修改配置文件都相当痛苦.因而想到了用shell脚本来批量生成配置文件和配置数据.下面这个脚本是为了批量生成nagios监控配置文件的一个shell脚本程序.其原理是事先定义一个shell脚本模板,然后每个需要监控的站点复制一份模板替换掉模板文件里面的变量. 1.准备模板文件webcheck.template more webcheck.template ###################WEBURL define start##############

shell脚本学习总结12--系统信号

信号是Linux系统中一种进程通信机制.我们可以使用特定的信号来中断进程.每一种信号都同一个整数值相关联. kill命令可用来想进程发送信号,而trap命令用来处理所接收的信号. kill 列出所有可用的信号 [[email protected] ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGS

Shell 脚本自动生成Crontab

1.有时候运维需求自动生成 Cronab 任务计划,执行对应服务名称进行管理; #!/bin/bash #athor check crontab  crontab_add(){ cron_path="$1" cat >/etc/cron.d/$cron_path<<EOF # Run service application        */5 * * * * root  /chj/app/$cron_path/bin/console start EOF } chec

shell脚本中生成延时

#!/bin/bash echo -n count: tput sc count=0; while true; do if [ $count -lt 40 ]; then let count++; sleep 1; tput rc tput ed echo -n $count; else exit 0; fi done tput sc 存储光标位置: tput rc 恢复光标位置: tput ed 清除从当前光标位置到行尾之间的所有内容

Linux01-BASH脚本编程之信号捕捉及任务计划53

一.脚本编程知识点 1.获取变量中字符的长度:${#VARNAME} 2.变量赋值: a)${parameter:-word}:如果parameter为空或未定义,则变量展开为"word":否则,展开为parameter的值: 如:A=3 echo ${A:-30} unset A echo ${A:-30} b)${parameter:+word}:如果parameter为空或未定义,不做任何操作:否则,则展开为"word"值: 如:echo ${A:+30} A

信号捕捉及计划任务

查看本机硬件设备信息 1.cat /proc/cpuinfo 2.lsusb 3. lspci 4 hal-device stty –F /dev/console size 取文件大小 脚本编程知识点: 变量中字符的长度:${#VARNAME} 变量赋值等 ${parameter:-word}; 如果 parameter为空或未定义,则变量展开为"word",否则,展开为parameter的值. [[email protected] ~]# A=3 [[email protected]

shell脚本编程之变量的小用法

变量赋值 ${parameter:-word}:如果parameter为空或未定义,则变量展开为"word":否则,展开为parameter的值: ${parameter:+word}:如果parameter为空或未定义,不做任何操作:否则,展开为"word"值: ${parameter:=word}:如果parameter为空或未定义,则变量展开为"word",并将展开后的值赋值给parameter: ${parameter:?word}:如果

shell脚本进阶之信号的捕捉

shell脚本之信号的捕捉 ? trap,翻译过来就是陷阱的意思,shell脚本中的陷阱是专门用来捕捉信号的.啥信号呢?比如经常使用的kill -9,kill -15,CTRL+C等都属于信号 1.查看所有可用的信号 trap -l或kill -l即可 [[email protected] ~]# kill -l 63) SIGRTMAX-1 64) SIGRTMAX [[email protected] ~]# trap -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4)

shell 脚本编程之信号捕捉和主机探测

shell 脚本编程之信号捕捉和主机探测 =============================================================================== 概述: =============================================================================== 主机探测 1.写一个脚本,探测192.168.0.0网段中主机在线状态 [[email protected] bin]# cat