Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I use nohup quite often for important long running processes under linux/bash, so much so that nohup time my command with arguments && mv nohup.out my.log is almost an idiom for me.

The problem is that nohup puts both stdout and stderr into nohup.out, and I cannot control the name of the file. This means that if I accidentally start two nohups in the same directory, their output will be interleaved in nohup.out.

The questions are:

  1. How do I deal with this problem? Always running nohups in separate directories and writing a shell function which will first check for ./nohup.out are two sucky options I see.

  2. How come I cannot tell nohup.out where to redirect the output? GNU tools tend to have so many options, why not nohup?

share|improve this question
up vote 3 down vote accepted

You can redirect both stdout and stderr to one file. With Bash 4 (or others such as Zsh), as easy as:

nohup <some-command> &> output.log

I can't tell you why there's no separate option for nohup to set the output, but if your shell can take care of that, you don't really need an option.

share|improve this answer
    
Will it prevent nohup from performing its own redirection? – grawity Feb 14 '13 at 15:45
1  
GNU nohup says that it'll redirect stdout to a file if you specify nohup command > file. BSD nohup doesn't mention this at all, but it worked for me. – slhck Feb 14 '13 at 15:50
    
GNU nohup says that it'll redirect stdout to a file if you specify nohup command > file Isn't redirection in case of nohup command > file being handled by shell and not nohup? If so then how can nohup take any action based on weather redirection is present or not? – Piotr Dobrogost Jan 21 '15 at 8:29

There are more ways than just nohup to start a process so that it would ignore SIGHUP; for example: (written as shell functions)

nohup() {
    setsid "$@"
}

nohup() {
    ("$@" &)
}

nohup() {
    "$@" & disown
}

(setsid, or even (setsid "$@" &), might be the best choice.)

All of them allow you to specify your own redirections with >, 2>, and &>/>&.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .