나는 이것이 코딩 버그이기 때문에 SO에 속하는지 알지 못했지만 사용 된 소프트웨어의 미묘함에 대해 더 잘 알고 있다고 생각했습니다 (아마도 U & L도 고려 될 수 있음).
최소한의 코드 스크립트는 다음과 같습니다 (전체 스크립트의 수정 사항 참조,이 방법으로 수행하는 이유가 있습니다).
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
수행하려는 작업은 백그라운드에서 서버를 실행하여 로그 파일로 출력하는 것입니다.
그런 다음을 follow
사용하여 로그 파일을 작성 less +F
합니다. 당신이 할 때, 이것을 종료하려면 ctrl+ c를 치기 전에 누르십시오 Q.
무슨 일이 일어 났는지, 명령을 ctrl+ 중지 할 때 (중지하려면 ) 어떻게 든 맨 처음부터 서버를 죽입니다 ! 다른 것은 영향을받지 않습니다. + 로그를 다시 시작하기 시작할 수 있습니다 (서버가 종료 된 후 새로운 정보를 얻지 못함) . 나머지 스크립트를 칠 경우 정상적으로 실행됩니다.cless
tailing
nohup
shiftfQ
왜 이런 일이 발생하는지 아십니까? 어떻게 피해야합니까 / 다른 것을 사용해야합니까?
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
. 프로그램은 어떻게이 작업을 수행합니까? 그렇다면 어떻게 막을 수 있습니까?