다음 bash 스크립트는 Apache Tomcat을 시작하고 로그 파일을 화면에 표시합니다.
#!/bin/bash
~/tomcats/TC1_8083/bin/startup.sh
tail -f ~/tomcats/TC1_8083/logs/catalina.out
꼬리를 CTRL-C하면 bash 스크립트가 종료되고 로그오프하더라도 Tomcat은 계속 올바르게 실행됩니다. 그러나 내 세션이 종료되면(예: 네트워크 연결 끊김을 통해) tail이 계속 실행되는 동안 Tomcat도 중지됩니다. 꼬리를 CTRL-C'로 설정했다면 Tomcat은 내가 죽이기로 선택할 때까지 멈추지 않을 것입니다.
나는 네트워크 연결이 끊어졌을 때 꼬리를 유지하는 데 관심이 없으며 Tomcat이 관계없이 계속 실행되기를 원합니다.
저는 이런 행동을 이해할 수 없습니다. 누군가 설명해 주시겠습니까? 또한 네트워크 연결이 끊어져도 Tomcat이 계속 실행되도록 스크립트를 어떻게 변경할 수 있습니까?
답변1
다른 스크립트에서 스크립트를 호출하면 백그라운드에서 실행됩니다. (그렇지 않으면 두 개의 스크립트가 동시에 포그라운드에서 실행되어 둘 다 화면에 출력을 시도하게 됩니다.)
Ctrl-C를 누르면 인터럽트 신호를 스크립트(꼬리뿐만 아니라)에 보내지만 Tomcat 스크립트는 별도의 스크립트이므로 백그라운드에서 계속 실행됩니다.
세션이 종료되면 백그라운드에서 실행 중인 스크립트를 포함하여 실행 중인 모든 스크립트가 종료됩니다.
네트워크 연결이 끊어졌을 때(의도적으로든 아니든) 스크립트가 계속 실행되도록 하려면 tmux 또는 screen을 권장합니다.