Я не знал, относится ли это к 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
, Как бы программа сделала это? Как тогда я могу это остановить?