서버에 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
프로세스가 종료되어 이러한 설명자가 닫힐 때까지 기다립니다.
따라서 시작하는 프로세스가 에서 제공하는 STDOUT 및 STDERR 설명자 에도 연결되어 있지 않은지 확인해야 하며 sshd
(STDIN은 에서 열림 ) 이를 파일이나 . SSH 연결이 끊어지면 아무 것도 전송되지 않으므로 이 명령은 꼭 필요한 것은 아닙니다 ./dev/null
/dev/null
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 치트 시트가 있는 웹사이트가 많이 있습니다. 시작하는 것은 매우 쉽습니다.