이것을 구글링하는 방법(몇 가지를 시도했지만 많은 것을 얻지 못했습니다)이나 이것이 어떻게 호출되는지 잘 모르겠습니다. 이것이 나의 일반적인 작업흐름입니다:
- SSH를 통해 서버에 연결
- 그곳에서 뭔가를 실행하고 백그라운드에서 실행되도록 하세요(예: bg 명령)
- SSH를 종료하고 나중에 다시 돌아오세요
나중에 다시 돌아올 때 프로세스가 종료되었는지와 프로세스가 종료된 상태(segfault 또는 기타)를 확인하거나 실행 중인 프로세스에 대한 종료 상태 정보를 얻을 수 있는 방법이 있습니까? 예를 들어 정상적으로 실행하고 터미널을 계속 열어두면 분할 오류 등이 인쇄되는데 연결을 끊었다가 다시 연결한 후 이 상태를 어떻게 얻는지 모르겠습니다.
답변1
연결이 끊어진 상태에서 살아남으려면 대화형 세션을 사용하거나 screen
활성화 tmux
하세요.
의 경우 를 사용하여 세션을 분리할 수 있습니다 screen
. 다음과 같은 메시지가 표시됩니다.Ctrlad
[detached from 12345.pts-9.hostname]
그러면 안전하게 연결을 끊을 수 있습니다. 다시 연결하면 screen -r
원래 위치로 돌아갑니다.
의 경우 then을 tmux
사용하여 분리했다가 다시 연결하세요.Ctrlbdtmux attach
답변2
백그라운드 프로세스에 #screen 명령을 사용하면 화면에서 백그라운드 프로세스를 쉽게 확인할 수 있습니다. 자세한 내용은 이 사이트를 참조하세요 ->http://www.tecmint.com/screen-command-examples-to-manage-linux-terminals/
답변3
한 가지 방법은 프로그램의 출력을 파일로 리디렉션하는 것입니다. bash
셸 에서는 다음을 수행할 수 있습니다.
{ myprog; echo "Exit status: $?"; } </dev/null &>output_file & disown
세션을 종료하는 경우 ssh
위에서 설명한 대로 모든 출력을 리디렉션하여 터미널에서 프로세스의 연결을 끊었는지 확인해야 합니다.
명령의 출력을 확인하기 위해 다시 로그인하지 않으려는 경우 한 가지 옵션은 서버에서 출력을 이메일로 보내도록 하는 것입니다(올바르게 설정된 경우). .bashrc
이 작업을 자주 반복해야 한다면 서버에서 함수를 만드는 것이 더 쉬운 접근 방식일 수 있습니다.
run_and_email () {
{
{
"$@"
echo "Exit status: $?"
} 2>&1 |
mail -s "$1 output" [email protected]
} </dev/null &>/dev/null & disown
}