我正在尝试使用分离的屏幕会话在远程主机上执行脚本。我尝试了example Fabric gives,但遗憾的是无法让它发挥作用。
from fabric.api import run
def yes():
run('screen -d -m "yes"')
在我的本地计算机上执行fab yes
会正确地将其连接到远程主机,并说该命令已运行,但远程主机上没有执行任何操作。在任一计算机上尝试screen -d -m "yes"
都可以按预期工作。
如果有人能指出我做错了什么,我会非常感激。另外,在旁注中,为什么命令中的yes附近有引号?没有引号会有用吗?谢谢!
答案 0 :(得分:16)
run('screen -d -m yes; sleep 1')
有效。
不确定Fabric或屏幕是否应该归咎于此行为。
答案 1 :(得分:4)
尽管AVB的答案是完美的,但我会添加一个小小的提示,这可能会帮助像我这样的人。如果要运行多个命令,请将它们放入可执行文件中。
这不起作用:
run('screen -d -m "./ENV/bin/activate; python run.py; sleep 1"')
所以创建一个run.sh文件:
#!/bin/bash
source ENV/bin/activate
python run.py
并像run('screen -d -m ./run.sh; sleep 1')
答案 2 :(得分:1)
像这样使用它:
run('sudo screen -d -m python app.py && sleep 1', pty=True)
screen -d -m
启动以断开连接模式启动的会话