V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pythonee
V2EX  ›  问与答

怎么通过ssh来执行远端脚本

  •  
  •   pythonee · 2013-01-04 22:53:27 +08:00 · 3680 次点击
    这是一个创建于 4347 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为是内部环境,所以我配置了公钥无密码两台机器互相ssh登陆

    我的意图主要是,通过ssh远程连接到服务器,重启上面的服务,重启完之后,进行一些脚本测试。

    假设这个远端脚本就叫restart.sh,执行他会在控制台输出一些东西,问题来了,我如果在客户机下

    ssh user@host "~/restart.sh"

    这样的话,一旦连接就会发生,客户机上的脚本无法继续往下走了,google了一下,好像说,需要另外的tty才行,所以改成

    ssh user@host "~/restart.sh < /dev/null > /dev/null 2>&1 &"

    注意nohup和重定向的设置后,这个重启的任务便可以在后台执行,而且执行完之后,可以断开这个ssh连接,但是问题又来了,这个重启在后台执行,让我无法知道他什么时候重启完成了,我接下来做的事情是要依赖他重启完成且成功的。大家说说该怎么改一下。对ssh的一些选项也不怎么熟现在
    9 条回复    1970-01-01 08:00:00 +08:00
    okidogi
        1
    okidogi  
       2013-01-04 23:02:29 +08:00
    看了两遍没看明白。。。不过如果你的需求是断开ssh连接服务器端仍然在执行并且最后再次连接可以看到运行结果的话,screen是你的不二选择。
    Kymair
        2
    Kymair  
       2013-01-04 23:08:25 +08:00
    我也没看懂 楼主你是想要blocking还是non-blocking的?
    atom
        3
    atom  
       2013-01-05 00:41:39 +08:00
    楼主其实就是要自己搞一套发布部署脚本,有基本的协调控制。

    在执行完ssh user@host "~/restart.sh < /dev/null > /dev/null 2>&1 &"
    加上轮询逻辑,每隔几秒检查一下目标机的状态。
    无外乎两种套路。
    1.你的服务特征明显,ps看下进程名
    2.你的服务特征不明显,那么可以在服务启动成功时,写入pid+时间戳或别的什么东西,到某个临时文件。转而检查这个临时文件的内容是否符合启动特征。
    pythonee
        4
    pythonee  
    OP
       2013-01-05 09:05:48 +08:00
    @atom

    没有错,确实是这样,非要论询吗,其实我就是不想轮询才想问的
    pythonee
        5
    pythonee  
    OP
       2013-01-05 09:06:28 +08:00
    @okidogi
    @Kymair

    抱歉,表达不到位,大家可以参考一下3楼吧
    atom
        6
    atom  
       2013-01-05 12:55:43 +08:00
    @pythonee 轮询复杂度最低,脚本的本质是quick and dirty,感觉比较难做到你理想中的情况。期待楼下有更好的方案。
    ratazzi
        7
    ratazzi  
       2013-01-05 13:09:40 +08:00
    用 fabric 吧,需要些 python 基础
    pythonee
        8
    pythonee  
    OP
       2013-01-05 13:17:06 +08:00
    @atom

    目前暂时用轮询实现了,谢谢
    Mattsive
        9
    Mattsive  
       2013-01-05 18:24:03 +08:00
    fabric 两行代码的事
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2143 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:40 · PVG 08:40 · LAX 16:40 · JFK 19:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.