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