3
votes

What I am trying to do: I am trying to execute couple of bash commands on a remote machine using ssh and I want those commands to finish execution even after ssh-session is closed in the middle of execution.

What I have done so far : I am using Putty to connect to ssh (one of the reasons of using putty is that one machine is windows and remote machine is mac-os and I need some way to initiate ssh through Python command). I am passing command.txt file and it contains all the commands I want to execute.

putty -ssh [email protected] -m command.txt ( not real ip)

command.txt : looks like this :

export PATH=$PATH:/usr/local/bin
echo $PATH; sleep 1
tmux -c 'queue.sh'
sleep 100

After connecting to ssh, to make sure that my script/commands continue running on remote machine even after ssh-session is closed on another machine, I am using 'tmux'

But the Problem is : Even after using tmux, processes called by queue.sh terminate as soon as I close ssh-session.

I have also tried

export PATH=$PATH:/usr/local/bin
echo $PATH; sleep 1
tmux
queue.sh
sleep 100

does the same thing.

What I also tried : If I just pass following commands using ssh (in command.txt)

export PATH=$PATH:/usr/local/bin
echo $PATH; sleep 1
tmux

and then manually type queue.sh in tmux terminal, is that case I can close ssh-terminal and remote machine continues execution of processes.

Any suggestion ? I want to be able to pass everything though script files and keeping the processes running on remote machine (mac-os) even after closing ssh-session on another machine.

Thanks

1

1 Answers

3
votes

The -c option doesn't actually start a new session; it's for compatibility with other shells if you use tmux as a login shell. In order to run queue.sh in a tmux session, try starting tmux with

tmux new-session queue.sh