I would disconnect the command from its standard input/output and error flows:
nohup python3 -u <script> </dev/null >/dev/null 2>&1 &
ssh
needs an indicator that doesn't have any more output and that it does not require any more input. Having something else be the input and redirecting the output means ssh
can safely exit, as input/output is not coming from or going to the terminal. This means the input has to come from somewhere else, and the output (both STDOUT and STDERR) should go somewhere else.
The </dev/null
part specifies /dev/null
as the input for <script>
. Why that is useful here:
Redirecting /dev/null to stdin will give an immediate EOF to any read
call from that process. This is typically useful to detach a process
from a tty (such a process is called a daemon). For example, when
starting a background process remotely over ssh, you must redirect
stdin to prevent the process waiting for local input.
https://stackoverflow.com/questions/19955260/what-is-dev-null-in-bash/19955475#19955475
Alternatively, redirecting from another input source should be relatively safe as long as the current ssh
session doesn't need to be kept open.
With the >/dev/null
part the shell redirects the standard output into /dev/null essentially discarding it. >/path/to/file
will also work.
The last part 2>&1
is redirecting STDERR to STDOUT.
There are three standard sources of input and output for a program.
Standard input usually comes from the keyboard if it’s an interactive
program, or from another program if it’s processing the other
program’s output. The program usually prints to standard output, and
sometimes prints to standard error. These three file descriptors (you
can think of them as “data pipes”) are often called STDIN, STDOUT, and
STDERR.
Sometimes they’re not named, they’re numbered! The built-in numberings
for them are 0, 1, and 2, in that order. By default, if you don’t name
or number one explicitly, you’re talking about STDOUT.
Given that context, you can see the command above is redirecting
standard output into /dev/null, which is a place you can dump anything
you don’t want (often called the bit-bucket), then redirecting
standard error into standard output (you have to put an & in front of
the destination when you do this).
The short explanation, therefore, is “all output from this command
should be shoved into a black hole.” That’s one good way to make a
program be really quiet!
What does > /dev/null 2>&1 mean? | Xaprb
Best Answer
The key is the "wait" command: