I'm trying to run a program over SSH that keeps running when I disconnect. This Stack Overflow answer gave me the following command:

nohup sleep 30 > foo.out 2> foo.err < /dev/null &

Unfortunately, it doesn't seem to work. I login (ssh -Y) to a remote bash shell and execute it, disconnect, and come back within 30 seconds, but jobs shows nothing and the foo files also show nothing. Is there any other way I can run background jobs over ssh after I logout?

  • 3
    The sleep command does not generate any output, so you should expect the output files to remain empty.
    – tripleee
    Dec 20, 2011 at 8:27
  • 4
    Oh, and jobs only shows processes that are descendants of the current shell. Try with ps | grep sleep instead.
    – tripleee
    Dec 20, 2011 at 8:29
  • 1
    This does not seem a question related to ssh.
    – enzotib
    Dec 20, 2011 at 11:27
  • Question is a bit confused. Dec 20, 2011 at 11:32

2 Answers 2

ssh user@server "echo /usr/run/my/job | at now +1 min"

jobs won't show anything if you spawned the process in another shell; the first line of its man page description is:

The jobs utility shall display the status of jobs that were started in the current shell environment

So you could ssh to the computer, sleep 30 &, and ssh from another window, and jobs still wouldn't show anything in that other window even though the process is obviously still running. The command you have works; try using ps or pgrep to check for it instead (e.g. pgrep sleep)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy