执行远程bash脚本时结构挂起

2024-06-03 02:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为ssadmin.sh的bash脚本,它管理另一个脚本sscounter.sh。 我正在使用fabric执行ssadmin.sh。在

没有pty=False

def ts1():
    with settings(warn_only=True):
        run("chmod 775 %s" % 'ssadmin.sh')
        run("%s start" % 'ssadmin.sh')

sscounter.sh甚至无法启动,但cmd不会被挂起:

^{pr2}$

使用pty=False

def ts1():
    with settings(warn_only=True):
        run("chmod 775 %s" % 'ssadmin.sh')
        run("%s start" % 'ssadmin.sh', pty=False)



root@ubuntu-1404:~# /mithril/scripts/ss-bash/ssadmin.sh status
ssserver not running
10670 ?        S      0:00 /bin/bash /mithril/scripts/ss-bash/sscounter.sh
sscounter.sh is running

在子计数器.sh已启动,但cmd挂起:

E:\[Sync]\project\walbk\fab>fab ts1
[192.168.1.181] Executing task 'ts1'
[192.168.1.181] run: chmod 775 /mithril/scripts/ss-bash/ssadmin.sh
[192.168.1.181] run: /mithril/scripts/ss-bash/ssadmin.sh start
[192.168.1.181] out: stdin: is not a tty
[192.168.1.181] out:  9915 ?        S      0:00 /bin/bash /mithril/scripts/ss-bash/sscounter.sh
[192.168.1.181] out: sscounter.sh鍚姩涓?..
[192.168.1.181] out: 10670 ?        S      0:00 /bin/bash /mithril/scripts/ss-bash/sscounter.sh
[192.168.1.181] out: sscounter.sh宸插惎鍔?
[192.168.1.181] out:                 (hang at here)

1.为什么织物会挂起来?在

2.fabric pty descriptionhttp://docs.fabfile.org/en/latest/usage/interactivity.html#echoes

pty is present to echo a user’s stdin,为什么sscounter.shpty=True时不启动?在


Tags: runbashfalsetrueshscriptsoutstart
1条回答
网友
1楼 · 发布于 2024-06-03 02:41:49

我浏览了一下您的代码,因为您不需要在sscounter.sh中打印任何内容,有一个解决挂起问题的快速方法:将( $DIR/sscounter.sh ) &更改为( $DIR/sscounter.sh ) >/dev/null 2>&1 &。在

当您没有重定向stdout时,fabric将等待它,因为您的sscounter.sh不会退出fabric似乎挂起了。在

如果您像这样远程运行ssadmin.sh(没有stdout重定向的版本):ssh user@remote-host 'bash ssadmin.sh',它也会因为同样的原因挂起。否则,如果您正在使用ssh -t user@remote-host 'bash ssadmin.sh',它将不会挂起。在

我认为将fabric与pty=Truepty=False一起使用就像使用ssh和{}选项一样。在

相关问题 更多 >