我有一个名为ssadmin.sh
的bash脚本,它管理另一个脚本sscounter.sh
。
我正在使用面料来执行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也不会被绞死:
root@ubuntu-1404:~# /mithril/scripts/ss-bash/ssadmin.sh status
ssserver not running
sscounter.sh not running
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
sscounter.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 description
。:
http://docs.fabfile.org/en/latest/usage/interactivity.html#echoes
pty is present to echo a user’s stdin
,为什么sscounter.sh
在pty=True
时无法启动?
答案 0 :(得分:1)
我瞥了一眼您的代码,因为您不需要在sscounter.sh
中打印任何内容,因此有一个快速解决问题的方法:将( $DIR/sscounter.sh ) &
更改为( $DIR/sscounter.sh ) >/dev/null 2>&1 &
当你没有重定向标准输出时,结构将等待它,因为你的sscounter.sh
不会退出结构似乎挂起。
如果你像ssadmin.sh
那样远程运行ssh user@remote-host 'bash ssadmin.sh'
(没有重定向stdout的版本),它也会因同样的原因而挂起。否则,如果您使用ssh -t user@remote-host 'bash ssadmin.sh'
,则不会挂起。
我认为使用带有pty=True
和pty=False
的结构就像使用带有和不带ssh
选项的-t
一样。