nohup output redirection to a different file

5

2

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 where to redirect the output? GNU tools tend to have so many options, why not nohup?

sds

Posted 2013-02-14T15:38:49.487

Reputation: 1 600

Answers

7

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.

slhck

Posted 2013-02-14T15:38:49.487

Reputation: 182 472

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 – 2015-01-21T08:29:00.570

The file nohup.out will be created in the case of error output, too; but if you redirect both stdout and stderr, there cannot be any output, so the file will not be created. But the &> syntax is not POSIX-compliant; you're better off with the answer by Irshad Khan elsewhere on this page. – tripleee – 2018-04-20T07:14:23.930

Will it prevent nohup from performing its own redirection? – user1686 – 2013-02-14T15:45:32.790

1GNU 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 – 2013-02-14T15:50:10.467

6

To Append output in user defined file you can use >> in nohup command.

nohup php your_command >> filename.out 2>&1 &

This command will append all output in your file without removing old data.

Irshad Khan

Posted 2013-02-14T15:38:49.487

Reputation: 161

1And if you want to overwrite the output file using POSIX sh syntax, that's simply nohup your_command >filename.out 2>&1 & – tripleee – 2018-04-20T07:15:17.160

3

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 &>/>&.

user1686

Posted 2013-02-14T15:38:49.487

Reputation: 283 655