Я не знал, относится ли это к SO (поскольку это ошибка кодирования), но подумал, что вы, ребята, лучше разберетесь в тонкостях используемого программного обеспечения (так что, возможно, даже U & L можно рассмотреть).
Вот минимальный код скрипта (см. Правки для полного скрипта, есть причина, по которой я так делаю);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
Он пытается запустить сервер в фоновом режиме, который выводит файл журнала.
Тогда я followэтот файл журнала с помощью less +F. Как вы делаете, чтобы выйти, вы должны нажать ctrl+, cпрежде чем вы можете нажать Q.
Что происходит, когда я ctrl+ cвнутри lessкоманды (чтобы остановить tailing), это как-то убивает сервер, с которого начинаются nohupсверху! Ничего другого не затронуто. Я могу shift+, fчтобы снова начать следить за журналом (который не получает никакой новой информации, так как сервер убит), и если я нажму Qостальную часть сценария, он будет работать нормально.
Вы знаете, почему это происходит? Как избежать этого / что-то еще, что я должен использовать?
PS
Программа сервера может прослушивать ^C, что может быть проблемой; что я могу сделать, чтобы остановить это? Например, когда я просто запускаю сам {SERVERCOMMAND}по себе (блокирующим образом), я могу нажать ctrl+ c, что не сразу его убивает; это печатает Received ^C signal, shutting down(и затем убивает себя). Это то, что происходит, когда я ^Cв less(Финал Received ^C signal, shutting downзаписывается в журнал).
PPS
Я пробовал много вещей (ни один не работал);
пытаясь отключить стандартный ввод от сценария, изменив
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &использовать
stty intr ^Gдля замены команды прерывания, но затем ctrl+ gсделал именно то, что^Cделал в любом случае (так что это может быть проблемой с моим эмулятором терминала;konsole)поместив строку
nohup& / илиlessстроку в скобках (чтобы сделать ее подоболочкой)запуск сценария
xtermвместоkonsole
nohupпредотвращает процесс от получения SIGHUPсигнала, тогда как CTRL + C отправляет SIGINTсигнал. Вот почему nohupне дает ожидаемого эффекта.
I think it is due to the handling within the database software, not on the shell, Как бы программа сделала это? Как тогда я могу это остановить?