Перенаправление вывода nohup в другой файл
Я использую nohup довольно часто для важных длительных процессов под linux / bash, настолько, что nohup time my command with arguments && mv nohup.out my.log это почти идиома для меня.
Проблема в том, что nohup ставит оба stdout а также stderr в nohup.out и я не могу контролировать имя файла. Это означает, что если я случайно начну два nohup s в том же каталоге, их выходные данные будут чередоваться в nohup.out,
Вопросы:
Как мне справиться с этой проблемой? Всегда работает
nohups в отдельных каталогах и написание функции оболочки, которая сначала проверит./nohup.outя вижу два отстойных вариантаПочему я не могу сказать
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>, а также &>/>&,