免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 29784 | 回复: 12
打印 上一主题 下一主题

linux远程执行命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-02 11:41 |只看该作者 |倒序浏览
本帖最后由 netocool 于 2010-04-02 11:43 编辑

请问有人尝试过使用ssh远程执行命令吗?

请看如下的代码,我的远程执行命令的脚本remotecommand.sh:
  1. #!/bin/sh

  2. HOST_LIST="host1 host2 host3 host4"
  3. SSH_PORT=2202

  4. for loop in $HOST_LIST
  5. do
  6.         echo "executing in $loop:"
  7.         ssh -p $SSH_PORT $loop "$1"
  8.         echo
  9. done
复制代码
当我在host5使用此脚本执行如下命令:
  1. ./remotecommand.sh "tar zxvf /root/pat.tar.gz -C /home"
复制代码
执行tar zxvf /root/pat.tar.gz -C /home命令的提示信息会显示在host5的屏幕上,并且此命令不能同时在host1,host2,host3,host4中执行,需要等待在host1执行完毕再在host2上执行.......


但是我需要的是能够同时在host1 host2 host3 host4中执行此命令,并且执行命令的提示信息会在host1,host2,host3,host4中的屏幕显示,请问有更好的方法吗?谢谢

论坛徽章:
0
2 [报告]
发表于 2010-04-02 12:25 |只看该作者
分开4个脚本一起运行,实现同时显示?
"tar zxvf /root/pat.tar.gz -C /home  > /dev/tty "?

论坛徽章:
0
3 [报告]
发表于 2010-04-02 12:59 |只看该作者
把你第一段代码中的第9行改写成: ssh -f   -p $SSH_PORT $loop  "$1" &  即可

论坛徽章:
0
4 [报告]
发表于 2010-04-02 20:06 |只看该作者
shell也可以并发?强

论坛徽章:
0
5 [报告]
发表于 2010-04-03 13:34 |只看该作者
回复 4# lltlk


     不可以,只是几乎同时在后台执行而已

论坛徽章:
0
6 [报告]
发表于 2010-04-03 21:35 |只看该作者
分开4个脚本一起运行,实现同时显示?
"tar zxvf /root/pat.tar.gz -C /home  > /dev/tty "?
wing731 发表于 2010-04-02 12:25



    4个脚本一起运行会有冲突吧

论坛徽章:
0
7 [报告]
发表于 2010-04-06 14:45 |只看该作者
shell并发到远程主机

论坛徽章:
0
8 [报告]
发表于 2010-04-06 19:42 |只看该作者
可以并发的。呵呵。
  1. #!/usr/bin/ksh
  2. # SCRIPT: ptest.sh
  3. # AUTHOR: Ray001
  4. # DATE: 2008/10/03
  5. # REV: 2.0
  6. # For STUDY
  7. #
  8. # PURPOSE:
  9. # 实现进程并发,提高执行效率,同时能记录每个执行失败的子进程信息


  10. #定义并发进程数量
  11. PARALLEL=3
  12. #定义临时管道文件名
  13. TMPFILE=$.fifo
  14. #定义导出配置文件全路径名
  15. CMD_CFG=$HOME/cfg/ptest.cfg
  16. #定义失败标识文件
  17. FAILURE_FLAG=failure.log


  18. ####################### 函数定义 ########################
  19. # 中断时kill子进程
  20. function trap_exit
  21. {
  22. kill -9 0
  23. }


  24. # 通用执行函数
  25. exec_cmd()
  26. {
  27.     # 此处为实际需要执行的命令,本例中用sleep做示例
  28.         sleep ${1}
  29.     if [ $? -ne 0 ]
  30.     then
  31.         echo "命令执行失败"
  32.         return 1
  33.     fi
  34. }


  35. trap 'trap_exit; exit 2' 1 2 3 15

  36. #清理失败标识文件
  37. rm -f  ${FAILURE_FLAG}

  38. #为并发进程创建相应个数的占位
  39. mkfifo $TMPFILE
  40. exec 4<>$TMPFILE
  41. rm -f $TMPFILE
  42. {
  43.         count=$PARALLEL
  44.         while [ $count -gt 0 ]
  45.         do
  46.                 echo
  47.                 let count=$count-1
  48.         done
  49. } >&4

  50. #从任务列表 seq 中按次序获取每一个任务
  51. while read SEC
  52. do
  53.         read <&4
  54.         (  exec_cmd ${SEC} || echo ${SEC}>>${FAILURE_FLAG} ; echo >&4 ) &
  55. done<$CMD_CFG
  56. wait
  57. exec 4>&-

  58. #并发进程结束后判断是否全部成功
  59. if [ -f ${FAILURE_FLAG} ]
  60. then
  61.         exit 1
  62. else
  63.         exit 0
  64. fi

复制代码

论坛徽章:
0
9 [报告]
发表于 2010-04-06 23:08 |只看该作者
本帖最后由 levinswong 于 2010-04-06 23:13 编辑
可以并发的。呵呵。
Ray001 发表于 2010-04-06 19:42



   此乃通过管道模拟并发, 此并发非彼并发也。

论坛徽章:
0
10 [报告]
发表于 2010-04-06 23:14 |只看该作者
此乃管道模拟并发, 此并发非彼并发。
levinswong 发表于 2010-04-06 23:08



    楼主的意思就是同时在后台执行几个ssh进程。用我的脚本可以实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP