나는 (특정 명령을 사용하여) 많은 SSH 연결을 처리할 서버를 가지고 있습니다. 각 연결은 약간의 메모리를 소비하므로 연결이 끊어지자마자 세션(및 해당 셸/명령)을 닫는 것이 목표입니다.
/etc/ssh/sshd_config에서 시도했습니다.
TCPKeepAlive no
ClientAliveInterval 0
ClientAliveCountMax 0
그리고
TCPKeepAlive yes
ClientAliveInterval 1
ClientAliveCountMax 1
그러나 이제 "ssh user@server sleep.py" 세션을 연 다음 클라이언트 측에서 CTRL+C를 통해 닫으면 세션이 여전히 활성 상태입니다.
내 질문: 세션이 여전히 활성 상태이고 SIGHUP 신호를 수신하지 못하는 이유는 무엇입니까? 연결이 끊어졌을 때 쉘이 즉시 닫히도록 하려면 어떻게 해야 합니까?
어떤 전류가 발생합니까?
클라이언트: ssh user@server sleep.py
섬기는 사람:
1 root 0:00 /bin/sh -c /bin/bash /etc/app/run.sh
9 root 0:00 /usr/sbin/sshd -D
36 root 0:00 sshd: git [priv]
44 git 0:00 sshd: git@notty
45 git 0:00 sh -c sleep.py
클라이언트: CTRL+C(종료 명령)를 누르세요. 서버:
1 root 0:00 /bin/sh -c /bin/bash /etc/app/run.sh
45 git 0:00 sh -c sleep.py
9 root 0:00 /usr/sbin/sshd -D
답변1
아, 그런데 sshd 프로세스가예종료. 그것은 단지 파이썬 프로세스를 뛰어넘는 것입니다.
문제는 Python이 기본적으로 HUP 신호에 응답하지 않기 때문에 발생합니다. 나는 썼다:
테스트 파일
#!/bin/sh
sh -c ./test.py </dev/null
test.py
#!/usr/bin/python
import time
time.sleep(20)
그런 다음 HUP 신호를 실행하여 ./test.sh &
test.sh 프로세스에 보냅니다. test.sh 프로세스는 종료되지만 test.py 프로세스는 여전히 존재합니다.
Python 프로그램은 HUP 신호에 응답할 수 있지만 그렇게 하려면 프로그래밍해야 합니다. signal
모듈을 확인하세요 .