监控脚本项目

信号处理

1 什么是信号
由键盘组合键或者 kill 命令发出操作称之为信号 信号是发送给进程的,进程在收到信号后会作出默认的响应 2 为何要在进程内处理信号
进程在收到信号后会有默认的响应,
如果我们想改变进程在接收到信号后的反应,那么需要在进程内捕捉信号执行我们自定义的操作 主要的应用场景:
在进程内捕捉终止信号,然后忽略掉,从而达到让进程不受外界干扰正常运行完毕的效果 ps:不是所有的信号都可以被捕捉,比如-9 3、如何处理信号 trap "捕捉到信号之后要执行的命令" 信号
trap "" 信号
trap "" 信号1 信号2 信号3

示例如

[root@zzzwqh example]# cat 3.sh
#!/bin/bash trap "" INT QUIT HUP TERM TSTP clear
n=0 while :
do
[ $n -eq 0 ] && n=1 || n=0 if [ $n -eq 1 ];then
echo -e "\033[31m 红灯亮 \033[0m"
else
echo -e "\033[32m 绿灯亮 \033[0m"
fi sleep 0.5
clear
done
[root@zzzwqh example]#

进程脱离当前会话窗口运行

  • nohup
# 在终端 2 内
[root@zzzwqh ~]# echo $$
12479
[root@zzzwqh ~]# nohup ping www.baidu.com & # 关闭终端 2 # 在终端 1 内仍然可以看到进程
[root@zzzwqh ~]# ps -ef |grep [p]ing
root 13169 1 0 18:58 ? 00:00:00 ping www.baidu.com
[root@zzzwqh ~]#
  • setsid
# 父进程ID 是 1
setsid ping www.baidu.com &
  • (进程 &)
# 父进程ID 是 1
(ping www.baidu.com &)

Expect 介绍

Expect 命令

在使用expect时,基本上都是和以下四个命令打交道:

命令 作用
spawn 启动新的进程
expect 从进程接收字符串
send 用于向进程发送字符串
interact 允许用户交互
  • spawn命令用来启动新的进程,spawn后的expectsend命令都是和使用spawn启动的新进程进行交互。
  • expect通常用来等待一个进程的反馈,我们根据进程的反馈,再使用send命令发送对应的交互命令。
  • send命令接收一个字符串参数,并将该参数发送到进程。
  • interact命令用的其实不是很多,一般情况下使用spawnexpectsend和命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawnsendexpect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

Expect 基本使用

[root@zzzwqh example]# cat 4.sh
#!/usr/bin/expect spawn ssh root@127.0.0.1 hostname expect "yes/no"
send "yes\r" expect "assword"
send "1\n" expect eof
[root@zzzwqh example]#

PS:我们此时编写的是 expect 脚本,不要用 sh 4.sh 执行,可以 ./4.sh 运行,也可以 expect 4.sh 运行

  • expect 一问一答
#!/usr/bin/expect 

spawn ssh root@127.0.0.1 hostname

expect {
"yes/no" {send "yes\n";exp_continue}
"*assword" {send "1\n";}
} expect eof
  • 远程登录主机执行多条命令
[root@zzzwqh example]# cat 6.sh
#!/usr/bin/expect spawn ssh root@127.0.0.1 expect {
"yes/no" {send "yes\n";exp_continue}
"*assword" {send "1\n";}
} expect {
"#" {send "ls\n"}
} expect {
"*root*" {send "pwd\n"}
} expect {
"#" {send "exit\n"}
} expect eof
[root@zzzwqh example]#
  • interact(了解)
[root@zzzwqh example]# cat 7.sh
#!/usr/bin/expect spawn ssh zzzwqh@127.0.0.1 expect {
"yes/no" {send "yes\n";exp_continue}
"*assword" {send "1\n";}
} expect {
"*zzzwqh*" {send "ls\n"}
} expect {
"*zzzwqh*" {send "pwd\n"}
} interact [root@zzzwqh example]#
  • 在 expect 脚本中定义变量
#!/usr/bin/expect
set user "root"
set pass "1"
set ip "127.0.0.1"
set cmd "hostname" spawn ssh $user@$ip $cmd expect {
"yes/no" {send "yes\n";exp_continue}
"*assword" {send "$pass\n";}
} expect eof
  • 把 expect 引入 shell 脚本
#!/bin/bash

user="root"
pass="1"
ip="127.0.0.1"
cmd="hostname" expect << EOF
spawn ssh $user@$ip $cmd expect {
"yes/no" {send "yes\n";exp_continue}
"*assword" {send "$pass\n";}
} expect eof
EOF echo "success!!!"

Shell 信号处理 & Expect 免交互的更多相关文章

  1. shell中expect免交互

    expect前言观察ssh登录的交互现象有些程序难以避免的需要交互.你该如何解决脚本与程序的交互问题?名词解释期待, 预期, 盼望, 预料,料想, 指望, 希望, 要求,想, 认为一.概述 我们通过S ...

  2. shell编程之免交互 (不要再让你的双手过度劳累了)

    shell编程之免交互 1.Here Document免交互 2.Expect免交互 3.免交互磁盘创建 1.Here Document免交互 概述: Here Document使用I/O重定向的方式 ...

  3. 8.shell编程之免交互

    shell编程之免交互 目录 shell编程之免交互 Here Document免交互 免交互定义 Here Document变量设定 多行的注释 expect expect 定义 expect基本命 ...

  4. shell编程之免交互

    目录: 一.Here Document 免交互 二.Expect 一.Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令, 比如 ftp.cat 或 read ...

  5. Shell批量SSH免交互登录认证

    脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和C ...

  6. expect免交互用法

    一.ssh免交互远程连接linux服务器 ssh在远程连接linux系统时,会有交互,比如输入yes/no,或者需要输入密码.我们怎么避免这些交互呢!比如我们可以用telnet远程登录交换机,去备份交 ...

  7. shell编程-ssh免交互批量分发公钥脚本

    脚本基本原理 1.控制端免交互创建秘钥和公钥: 1 ssh-keygen -t rsa -f /root/.ssh/id_rsa -N "" 2.免交互发送公钥 1 sshpass ...

  8. 无密钥登录的自动脚本实现(ssh-copy-id、expect免交互输入脚本)

    感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正! 如有转载,请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...

  9. expect实现免交互

    如果想写一个能够自动处理输入输出的脚本又不想面对C或Perl,那么expect是最好的选择.它可以用来做一些Linux下无法做到交互的一些命令操作. (1).安装和使用expect expect是不会 ...

随机推荐

  1. Redis中哈希分布不均匀该怎么办

    前言 Redis 是一个键值对数据库,其键是通过哈希进行存储的.整个 Redis 可以认为是一个外层哈希,之所以称为外层哈希,是因为 Redis 内部也提供了一种哈希类型,这个可以称之为内部哈希.当我 ...

  2. SGA: allocation forcing component growth分析

    1.问题现象 20年12月31日,数据库应用人员反映2020-12-31 12:40:10存在告警,过了几分钟之后业务恢复正常. 表现的状态:Connect to database time out, ...

  3. uni-app 开发随笔(踩坑记录)

    这里总结一些uni-app开发时我遇到的坑 uni-app获取元素高度及屏幕高度(uni-app不可使用document) uni.getSystemInfo({ success: function( ...

  4. 数字化转型中企业真正困惑-传统IT架构如何改造和全面上云

    对数字化转型,整体来看大部分人相对关心问题主要还是集中在以下两个方面. 企业传统的IT架构如何如何微服务改造,演进发展 企业传统IT如何全面上云和实施云原生 以上两点实际都包括一个关键点,即企业当前内 ...

  5. Xamarin.Forms: 无限滚动的ListView(懒加载方式)

    说明 在本博客中,学习如何在Xamarin.Forms应用程序中设计一个可扩展的无限滚动的ListView.这个无限滚动函数在默认的Xamarin.Forms不存在,因此我们需要为此添加插件.在这里我 ...

  6. celery 动态配置定时任务

    How to dynamically add or remove tasks to celerybeat? · Issue #3493 · celery/celery https://github.c ...

  7. 【练习】goroutine chan 通道 总结

    1. fatal error: all goroutines are asleep - deadlock! 所有的协程都休眠了 - 死锁! package mainimport("fmt&q ...

  8. Tensorflow-各种优化器总结与比较

    优化器总结 机器学习中,有很多优化方法来试图寻找模型的最优解.比如神经网络中可以采取最基本的梯度下降法. 梯度下降法(Gradient Descent) 梯度下降法是最基本的一类优化器,目前主要分为三 ...

  9. RocketMQ 的几个简单问题与答案

    1 单机版消息中心 一个消息中心,最基本的需要支持多生产者.多消费者,例如下: class Scratch { public static void main(String[] args) { // ...

  10. 服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比

    服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比 注册中心简介 流程和原理 基础流程 核心功能 1.Eureka.Consul.Zookeeper三者异同点 ...