Can't get Fabric's detached screen session example to work
Asked Answered
S

3

11

I am trying to execute a script on a remote host using a detached screen session. I tried out the example Fabric gives and unfortunately couldn't get it to work.

from fabric.api import run

def yes():
    run('screen -d -m "yes"')

Executing fab yes on my local machine correctly connects it to the remote host and says the command has been run, however nothing is executed on the remote host. Trying screen -d -m "yes" on either machine works as expected.

If anyone could point out what I'm doing wrong I'd greatly appreciate it. Also, on a side note, why are there quotes around the yes in the command? Would it work without the quotes? Thanks!

Sororate answered 14/1, 2013 at 22:7 Comment(0)
A
17

run('screen -d -m yes; sleep 1') works.

Not sure if Fabric or screen are to blame for this behaviour though.

Alexandros answered 22/1, 2013 at 13:57 Comment(0)
D
4

Although AVB answer is perfect I'll add a small tip which may help someone like me. If you want to run more than one command put them to a executable file.

This will not work:

run('screen -d -m "./ENV/bin/activate; python run.py; sleep 1"')

So create a run.sh file:

#!/bin/bash
source ENV/bin/activate
python run.py

And use it like run('screen -d -m ./run.sh; sleep 1')

Draftsman answered 25/7, 2013 at 16:40 Comment(1)
why is the "sleep 1;" there?Stomatology
V
0

Use it like this:

run('sudo screen -d -m python app.py && sleep 1', pty=True) 

screen -d -m 

Start a session that starts in disconnected mode

Vegetarian answered 7/12, 2019 at 14:27 Comment(1)
Welcome to Stackoverflow. Please explain your answer so others can understand easily.Bently

© 2022 - 2024 — McMap. All rights reserved.