Search code examples
bashshellnohup

make nohup write other than nohup.out


I've been using below command to make tail to write nohup.out and also print the output on the terminal.

nohup train.py & tail -f nohup.out

However, I need nohup to use different file names.

When I try

nohup python train.py & tail -F vanila_v1.out

I'm getting following error message.

tail: cannot open 'vanila_v1.out' for readingnohup: ignoring input and appending output to 'nohup.out': No such file or directory

I also tried nohup python train.py & tail -F nohup.out > vanila_v1.txt

Then it doesn't write an output on stdout.

How do I make nohup to write other than nohup.out? I don't mind simultaneously writing two different files. But to keep track of different processes, I need the name to be different. Thanks.


Solution

  • You need to pipe the STDOUT and STDERR for the nohup command like:

    $ nohup python train.py > vanila_v1.out 2>&1 & tail -F vanila_v1.out
    

    At this point, the process will go into the background and you can use tail -f vanila_v1.out. That's one way to do it.

    A little more information is available here for the STDOUT and STDERR link. Here is another question that uses the tee command rather that > to achieve the same in one go.