저는 (이번 주 초에 Linux를 시작했을 때처럼) Linux를 처음 접하는 사람이므로 매우 간단한 질문인 경우 양해해 주시기 바랍니다. 원격 서버에서 프로그램을 실행하고 있는데 수백 기가바이트의 데이터가 포함된 긴 프로세스이므로 밤새도록 실행하고 싶습니다. 간단히 말해서 SSH를 통해 로그인하고 프로그램을 시작한 다음 실행 중인지 확인한 다음 터미널을 닫았습니다. 오늘 아침에 돌아와서 전날 밤에 ssh를 종료했을 때 있던 위치에 정확히 주차되어 있는 것을 보았습니다. 서버를 종료할 때 서버에서 프로세스를 계속 실행하는 방법이 있습니까?
답변1
다른 답변에서 알 수 있듯이. 당신은 그것을 사용할 수 있습니다 nohup <command> &
.
screen
(기본적으로) 분리 가능한 터미널인 을 사용할 수도 있습니다 . 이 명령을 사용하여 터미널을 시작 screen
하고 터미널에서 분리하려고 할 때 시작할 수 있습니다. Ctrl+ad. 터미널을 다시 연결하여 실행하세요 screen -r <terminal_name>
. 분리된 터미널이 여러 개인 경우 이 명령을 사용하여 screen -r
분리된 터미널의 이름을 볼 수 있습니다.
Screen은 여러 프로세스(일반적으로 대화형 셸) 간에 물리적 터미널을 다중화하는 전체 화면 창 관리자입니다. 각 가상 터미널은 DEC VT100 터미널의 기능과 함께 ISO 6429(ECMA 48, ANSI X3.64) 및 ISO 2022 표준의 제어 기능(예: 줄 삽입/삭제 및 다중 문자 집합 지원)을 제공합니다. 각 가상 터미널에는 스크롤백 기록 버퍼와 창 사이에서 텍스트 영역을 이동할 수 있는 복사-붙여넣기 메커니즘이 있습니다.
편집하다:
tmux
다음을 사용하여 살펴볼 수도 있습니다 .여기기본적인 "방법 tmux
"을 알아보세요.
tmux
터미널 멀티플렉서입니다. 터미널 멀티플렉서란 무엇입니까? 이를 통해 하나의 터미널에서 여러 프로그램 사이를 쉽게 전환하고 해당 프로그램을 분리한 다음(백그라운드에서 계속 실행됨) 다른 터미널에 다시 연결할 수 있습니다. 그리고 더 많은 일을 하세요.
답변2
원하는 명령을 이라고 합니다 nohup
. 기본 구문은 다음과 같습니다.
nohup <command>
그러면 <command>
SIGHUP(상위 SSH 세션이 종료될 때와 같이 제어 터미널이 닫힐 때 프로세스에 전송되는 신호)이 실행되고 강제로 무시됩니다. Systemd 기반 시스템에서는 이를 방지하는 것이 가능하지만 내가 아는 한 기본적으로 이러한 구성을 사용하는 배포판은 없습니다.
또는 명령이 at
존재하고 atd
실행 중인지 확인하십시오. 이 경우 시스템에 스크립트를 일괄 작업으로 실행하도록 지시하거나 다음을 사용하여 결과를 이메일로 보내도록 할 수도 있습니다.
at "`date +%FT%T`" << EOF
<command>
EOF
큰따옴표의 내용을 합리적인 날짜 및 시간 지정( at
"내일 오전 8시" 또는 "다음 일요일"과 같이 사람이 읽을 수 있는 합리적인 내용을 처리할 만큼 똑똑함)으로 바꿀 수 있지만 지정된 명령은 작업을 시작합니다. 즉시(date 명령은 현재 날짜와 시간(ISO 8601 타임스탬프)을 반환합니다.
답변3
SSH를 통해 서버에 로그인하고 다음을 실행합니다.
nohup YOUR_PROGRAM &
이렇게 하면 프로그램이 백그라운드에서 실행되며 SSH 세션의 연결이 끊어지고 사용 중인 셸이 중지되어도 중지되지 않습니다.
확인하다이 스레드및 에 대한 nohup
세부정보 입니다 &
.
답변4
nohup
이 경우 사용할 수 있습니다.
노력하다
$ nohup ./YourExecutableFile &
이렇게 하면 실행 파일이 실행되고 백그라운드에 배치되므로 로그아웃하더라도 중지되지 않습니다.