Я не знав, чи належить це до 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
Я пробував низку речей (жодна не працювала);
намагаючись відключити stdin від сценарію, змінивши
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. Як програма це зробить? Як же я можу це зупинити?