ssh 远程执行脚本(自己总结)

1. 远程执行前台脚本

# 1. 在hadoop113 上创建脚本s1.sh,用cat 和here document 创建并赋予执行权限
cd && cat > s1.sh << 'EOF' && chmod +x s1.sh
read             # 标准输入
echo $REPLY      # 标准输出,REPLY 是read 默认赋值变量
ls nonexistence  # 标准错误输出,ls 不存在的文件
EOF# 2. 在hadoop112 上通过ssh 执行
ssh hadoop113 './s1.sh'
## 屏幕打印出,假设第一行给read 输入了aaa
# aaa
# aaa
# ls: cannot access nonexistence: No such file or directory# 3. 结论
## 通过ssh 远程执行脚本,会将远程标准输入、标准输出、标注错误输出连接到ssh 客户端。

2. 远程执行后台脚本

# 1. 在hadoop112 执行
ssh hadoop113 './s1.sh &'
## 结果命令一执行就结束了
## 在hadoop113 上 ps -ef | grep s1.sh 也没结果,证明s1.sh 并没有被执行# 2. 在hadoop113 上创建脚本s2.sh,用cat 和here document 创建并赋予执行权限
cd && cat > s2.sh << 'EOF' && chmod +x s2.sh
hostname             # 显示主机名
ls -l /dev/std*      # 显示标准输入,标准输出,标准错误输出这三个软连接的数据源
ls -l /proc/self/fd  # 显示文件描述符指向的数据源,文件描述符其实也是软连接
ls nonexistence      # 标准错误输出,ls 不存在的文件
echo "END"
EOF# 3. 在hadoop112 执行
ssh hadoop113 './s2.sh &'
## 屏幕上显示
# hadoop113
# lrwxrwxrwx 1 root root 15 Mar 23 22:09 /dev/stderr -> /proc/self/fd/2
# lrwxrwxrwx 1 root root 15 Mar 23 22:09 /dev/stdin -> /proc/self/fd/0
# lrwxrwxrwx 1 root root 15 Mar 23 22:09 /dev/stdout -> /proc/self/fd/1
# total 0
# lr-x------ 1 abc abc 64 Mar 26 23:32 0 -> /dev/null
# l-wx------ 1 abc abc 64 Mar 26 23:32 1 -> pipe:[53435]
# l-wx------ 1 abc abc 64 Mar 26 23:32 2 -> pipe:[53436]
# lr-x------ 1 abc abc 64 Mar 26 23:32 3 -> /proc/20135/fd
# END# 4. 结论
## 通过ssh 将远程脚本通过& 放在后台执行时
## 标准输入指向远程服务器的/dev/null,这也解释了为什么s1.sh 中read 为何不执行
## 标准输出通过pipe 指向了ssh 客户端,所以ls 信息和最后的END 都打印了出来了
## 奇怪的是,标准错误输出虽也指向了pipe,但ls nonexistence 的错误信息并没有出现

3. 远程执行后台建议

# 1. 在hadoop113 上创建脚本s3.sh,用cat 和here document 创建并赋予执行权限
cd && cat > s3.sh << 'EOF' && chmod +x s3.sh
echo "start param1=$1"
while true; docase $1 in1) echo 111 ;;      # 第一个参数为1,打印111 到标准输出stdout2) echo 222 >&2 ;;  # 第一个参数为2,打印222 到标准错误输出stderr3) date >&2 ;;      # 第一个参数为3,打印日期到标准错误输出stderr*) echo 000 ;;      # 默认打印000 到标准输出stdoutesacsleep 2               # 每间隔两秒输出一次
done
EOF# 2. 在hadoop112 上执行
## 2.1 执行s3.sh 无参数,默认执行echo 000
ssh hadoop113 './s3.sh &'
### 显示start 后,屏幕每隔2 秒打印一次000,Ctrl+c 后,在hadoop113 上 ps -ef | grep s3.sh 能找到该进程
### 必须Ctrl+c 中断,否则无法输入其他命令,所以建议远程执行后台有标准输出的程序将stdout 重定向## 2.2 执行s3.sh 1,参数1==1,执行echo 111
ssh hadoop113 './s3.sh 1 &'
### 显示start 后,屏幕每隔2 秒打印一次111,Ctrl+c 后,在hadoop113 上 ps -ef | grep s3.sh 能找到该进程
### 必须Ctrl+c 中断,否则无法输入其他命令,所以建议远程执行后台有标准输出的程序将stdout 重定向## 2.3 执行s3.sh 2,参数1==2,执行echo 222 >&2,等价于echo 222 1>&2
ssh hadoop113 './s3.sh 2 &'
### 屏幕显示start 后直接结束,在hadoop113 上 ps -ef | grep s3.sh 没有结果
### echo 唯一的功能就是输出,而这里让它输出到无效的stderr 上,自然它会报错,导致整个脚本因异常退出## 2.4 执行s3.sh 3,参数1==3,运行date >&2,等价于date 1>&2
ssh hadoop113 './s3.sh 3 &'
### 屏幕显示start 后阻塞,Ctrl+c 后,在hadoop113 上 ps -ef | grep s3.sh 能找到该进程
### date 比较特殊,即使将它输出到不可用的stderr 也不会报错退出,可能输出并不是它最主要的功能,类似ls >&2 也不报错# 3. 远程执行后台程序建议
## 3.1 忽略标准输出,屏幕不阻塞
ssh hadoop113 './s3.sh 1 > /dev/null &'
### 不用按Ctrl+c,直接可以输入后续命令## 3.2 重定向标准输出和标准错误输出到日志文件
ssh hadoop113 './s3.sh 2 > t.log 2>&1 &'
### 这样屏幕不会阻塞,远端的程序也会在后台正常运行,注意2>&1 是一个整体,表示标准错误输出重定向到标准输出
tail -F t.log  # 可查看日志
### tail -F 根据文件名追踪文件,-f 文件滚动后就看不到了,因为虽然文件名相同但后台的inode 信息变更了

参考文章

Linux lsof命令详解
Transferring a file with SSH
SHELL 脚本 – 管道和重定向基础
彻底搞懂shell 的高级I/O 重定向
stderr over ssh -t

ssh 远程执行脚本(自己总结)相关推荐

  1. ssh远程执行nohup命令

    通常我们使用ssh远程执行脚本时可以如下操作: ssh root@192.168.0.100 "./my.sh" 但是如果我们想用nohup拉起脚本,让脚本后台运行,这样是不行的, ...

  2. ssh远程执行多个命令

    shell远程执行: 经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了.一下介绍两种shell命令远程执行的方法. 前提条件: ...

  3. SSH 远程执行任务

    SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进 ...

  4. 【linux】ssh 远程执行命令

    1.概述 转载并且补充:ssh 远程执行命令 SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操 ...

  5. SSH远程执行命令环境变量问题

    SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec][-D [bind_address:] ...

  6. linux远ssh sed,ssh远程执行sed -i命令,替换的内容中含有双引号的问题

    ssh远程执行sed -i命令,替换的内容中含有双引号的问题.在ssh 中执行sed -i 来替换匹配的字符串,当替换的内容中包含双引号"时,需要在转义的同时,加上单引号'"'. ...

  7. ssh mysql 导出excel_使用ssh远程执行命令批量导出数据库到本地(转)

    前天正在跟前端的同事调试功能.服务器开好,模拟的玩家登录好,就在倒计时.这时突然运营的同事跑过来说要统计几个服务器玩家的一些情况,也就是需要从几个服的数据库导出部分玩家的数据.好吧,我看了一下时间,1 ...

  8. Ansible介绍、安装、远程执行命令、拷贝文件或者目录、远程执行脚本

    Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,cent ...

  9. ssh-keygen产生公钥与私钥对,及密钥分发,ssh远程执行常用命令方法,和如何防止SSH登录入侵或被破解

    前言 SSH是安全的加密协议,用于远程连接Linux服务器,默认端口是22,安全协议版本是SSH2 . SSH原理 SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听 ...

  10. ansible介绍、安装、远程执行命令、拷贝文件或目录、远程执行脚本、管理任务计划、安装包和管理服务、playbook、变量、循环、条件判断、handlers、安装nginx、管理配置文件

    24.15 ansible介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系 ...

最新文章

  1. 英巴卡迪诺新年战略:支持Linux提供中文手册
  2. [C语言程序设计_现代方法(第2版)] 第二章 C语言基本概念
  3. [FZYZOJ 1038] 隧道
  4. C++(STL):26 ---关联式容器set用法
  5. 解决硬盘文件目录损坏且无法读取
  6. 终于研究出如何设置新版paypal付款时汇率损失方的问题了
  7. 常见面试算法:k-近邻算法原理与python案例实现
  8. mysql数据类型范围导致失败
  9. 进程 线程 协程_进程 线程 协程 管程 纤程 概念对比理解
  10. 以太网交换机erps学习记录
  11. 计算机网络延展-令牌环网
  12. 分期手续费转换为年化利率
  13. MFC 入门介绍和实例操作
  14. 普林斯顿陈丹琦团队最新论文:受GPT-3启发,用小样本学习给语言模型做微调,性能最高提升30% | AI 日报...
  15. Vim的插件管理利器pathogen
  16. 输入分数,判断成绩等级(使用if和switch两种方法)
  17. 正版软件,盗版软件和免费软件
  18. centos7启动dhcp失败_CentOS7中DHCP配置
  19. 数据库--数据备份与恢复
  20. 鼠标移上去悬停显示小手

热门文章

  1. 在线html5编辑器uedit,ueditor集成秀米编辑器 - HTML - php中文网博客
  2. google地图距离算法_谷歌地图计算两个坐标点的距离函数
  3. 《iPhone-电脑文件导入苹果手机》
  4. shell脚本造数据
  5. 网站备案后服务器更换到家里,域名备案后能更换服务器吗
  6. android取消输入法联想,输入法联想功能,怎么清除输入法联想
  7. ios 隔空投安装ipa_ios打ipa包安装到真机进行测试
  8. 诗词格律[7] 诗词的唱和
  9. 计算机考试反思1000,高一期中考试反思1000字,高一学生期中考试总结
  10. 【11-13】A股主要指数的市盈率(PE)估值高度