Просто или псевдоним, запускающий команду с nohup

У меня есть несколько длительных процессов, которые я запускаю с nohup и перенаправляю любой вывод в журнал. Так как мне обычно нравится наблюдать напрямую, по крайней мере вначале, я также добавляю хвост. В итоге это выглядит примерно так.

nohup myprocess.sh >> 20180611.log 2>&1 & tail -f 20180611.log

Не то чтобы это было очень сложно, но я надеялся, что смогу найти способ создать для него псевдоним. Вероятно, я мог бы сделать это с помощью сценария-оболочки, но я не хотел загромождать каталог двумя сценариями на процесс (поэтому я подумал о псевдониме). Спасибо!


person Fincher    schedule 12.06.2018    source источник
comment
Псевдоним — это слово, которое заменяется чем-то другим (более длинным фрагментом команды), когда оно является первым словом команды. Он не может принимать аргументы. Однако вы можете написать функцию оболочки (в вашем .bashrc), чтобы выполнить нужную вам обработку (и передать имя процесса и файл журнала в качестве аргументов).   -  person axiac    schedule 12.06.2018
comment
Не совсем тема здесь, но вас может заинтересовать терминальный мультиплексор, такой как screen, если у вас есть длительные вещи, которыми нужно управлять, и вы хотите выйти из системы до того, как они закончатся. nohup - это решение бедняка из 70-х. Для многих случаев использования сейчас есть лучшие вещи.   -  person Alfe    schedule 12.06.2018


Ответы (1)


Псевдоним — это слово, которое заменяется чем-то другим (более длинным фрагментом команды), когда оно является первым словом команды. Он не может принимать аргументы.

Однако вы можете написать функцию оболочки (в вашем .bashrc), чтобы выполнить нужную вам обработку (и передать имя процесса и файл журнала в качестве аргументов).

Это может выглядеть так (в .bashrc):

function no-hup() {
    nohup "$1" >> "$2" 2>&1 & tail -f "$2"
}
export -f 'no-hup'

Вы запускаете это так:

no-hup myprocess.sh 20180611.log
person axiac    schedule 12.06.2018
comment
Это удобно, но если я все еще передаю аргументы, это не дает упрощения, которого я искал. Я надеюсь, что это что-то вроде process1, который будет псевдонимом/запустит полную команду в моем вопросе. - person Fincher; 12.06.2018
comment
Если вы всегда хотите запускать myprocess.sh и помещать его вывод в 20180611.log, вы можете просто жестко закодировать эти значения в теле функции. Или вы можете написать это как псевдоним: alias foo="nohup myprocess.sh >> 20180611.log 2>&1 & tail -f 20180611.log" - person axiac; 12.06.2018
comment
Я бы также рекомендовал добавить disown, чтобы процесс мог продолжать работать без перерыва, если оболочка выйдет: no-hup() { nohup command &>> file & disown; tail -f file; } - person glenn jackman; 12.06.2018
comment
Касательно, мне больше нравится less +GF file, чем tail -f: вы можете нажать Ctrl+C, чтобы остановить хвост, но оставаться в меньшем количестве и использовать меньше команд для просмотра/поиска в файле. Чтобы снова начать отслеживание, используйте G, чтобы перейти в конец файла, и F, чтобы начать следование. - person glenn jackman; 12.06.2018
comment
@axiac Процесс будет жестко запрограммирован, но в файле журнала будет установлена ​​текущая дата. Я полагаю, я мог бы собрать это вместе в этой функции. - person Fincher; 12.06.2018
comment
Я понял это, сохранив дату в переменной, затем используя ее для вызова nohup и перехода в фоновый режим, а затем вызывая хвост. Я думаю, что это достаточно близко, чтобы я просто принял этот ответ, поскольку он вывел меня на правильный путь. Спасибо! - person Fincher; 12.06.2018