Перенаправление вывода nohup в другой файл

Я использую nohup довольно часто для важных длительных процессов под linux / bash, настолько, что nohup time my command with arguments && mv nohup.out my.log это почти идиома для меня.

Проблема в том, что nohup ставит оба stdout а также stderr в nohup.out и я не могу контролировать имя файла. Это означает, что если я случайно начну два nohup s в том же каталоге, их выходные данные будут чередоваться в nohup.out,

Вопросы:

  1. Как мне справиться с этой проблемой? Всегда работает nohup s в отдельных каталогах и написание функции оболочки, которая сначала проверит ./nohup.out я вижу два отстойных варианта

  2. Почему я не могу сказать nohup куда перенаправить вывод? У инструментов GNU, как правило, много вариантов, почему бы и нет nohup?

3 ответа

Решение

Вы можете перенаправить как stdout, так и stderr в один файл. С Bash 4 (или другими, такими как Zsh), так же просто, как:

nohup <some-command> &> output.log

Я не могу сказать вам, почему нет отдельной опции для nohup установить вывод, но если ваша оболочка может позаботиться об этом, вам не нужна опция.

Чтобы добавить вывод в пользовательский файл, который вы можете использовать >> в команде nohup.

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

Эта команда добавит все выходные данные в ваш файл без удаления старых данных.

Есть больше способов, чем просто nohup запустить процесс, чтобы он игнорировал SIGHUP; например: (написано как функции оболочки)

nohup() {
    setsid "$@"
}

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

nohup() {
    "$@" & disown
}

(setsid, или даже (setsid "$@" &)может быть лучшим выбором.)

Все они позволяют указать ваши собственные перенаправления с >, 2>, а также &>/>&,

Другие вопросы по тегам