SSH를 통해 장기 실행 백그라운드 프로세스를 시작하고 즉시 연결을 끊으려면 어떻게 해야 합니까?

SSH를 통해 장기 실행 백그라운드 프로세스를 시작하고 즉시 연결을 끊으려면 어떻게 해야 합니까?

서버에 SSH로 연결할 수 있는 bash 스크립트를 작성하고 지속적인 백그라운드 프로세스(무한 Python 스크립트)를 시작한 다음 서버를 종료하고 싶습니다. 내가 시도한 것은 다음과 같습니다.

ssh user@domain "python3 script.py &"

ssh user@domain "python3 script.py & exit"

ssh user@domain "nohup python3 script.py & exit"

그들 중 누구도 일하고 ​​있지 않습니다. 스크립트가 성공적으로 시작되지만 서버를 종료할 수 없으며 로그인 상태가 유지됩니다.

답변1

nohup명령은 사용자가 생각하는 대로 수행되지 않습니다. 중단 신호를 무시하므로 터미널 드라이버가 SIGHUP연결된 프로세스로 전송하지 않고도 STDIO의 (터미널) 연결을 삭제할 수 있지만 nohup자체 STDIO 연결은 닫지 않습니다. 효과는 이를 시작하는 프로세스에 전달하므로 sshd프로세스가 종료되고 해당 설명자가 결과적으로 닫힐 때까지 기다립니다.

sshd따라서 시작하는 프로세스가 에서 제공한 STDOUT 및 STDERR 설명자 (STDIN이 이미 에 열려 있음 ) 에 연결되어 있지 않은지 확인해야 하며 해당 /dev/null프로세스를 파일이나 로 리디렉션하여 이를 수행할 수 있습니다 /dev/null. . SSH 연결이 끊어지면 아무 것도 전송되지 않으므로 이 nohup명령은 꼭 필요한 것은 아닙니다 .SIGHUP

이 시도:

ssh user@domain "python3 script >/dev/null 2>&1 &"

답변2

터미널 멀티플렉서를 사용해 보세요. tmux가 좋습니다. 나는 일반적으로 무언가를 설치해야 할 수도 있다는 조언을 하는 것을 좋아하지 않지만 tmux는 도구 벨트에 있으면 정말 편리한 앱입니다. (이미 설치되어 있을 수도 있음)

tmux로 래핑된 앱을 실행하고 노트북을 닫고 다른 곳으로 이동하여 다시 로그인한 후 여전히 tmux에서 실행 중인 세션에 다시 연결할 수 있습니다. OS가 오래된 경우 화면은 비슷하지만 tmux를 선호합니다.

명령줄에서 새 앱을 시작하거나 다음과 같은 형식의 앱을 시작할 수 있습니다.

tmux 새 세션 "command1"

tmux new-session "ping 8.8.8.8"

하지만 세션 이름을 지정해야 할 수도 있습니다. 이제 백그라운드에서 시작되는 muxping이라는 간단한 새 세션이 제공됩니다. -d가 분리되었습니다.

tmux new -d -s muxping "ping 8.8.8.8"

이제 백그라운드에서 보여주세요

tmux ls

그것에 붙이다

tmux a

또한 tmux에서는 화면을 분할하고 매우 편리한 작업을 많이 수행할 수 있습니다. 큰 매뉴얼 페이지를 단순화하는 tmux 치트 시트가 있는 사이트가 많이 있습니다. 시작하는 것은 매우 쉽습니다.

관련 정보