&-" 0 파일='/data/nginx/llogs/access.log'"/> &-" 0 파일='/data/nginx/llogs/access.log'">
집 >운영 및 유지보수 >리눅스 운영 및 유지 관리 >쉘은 네트워크 클라이언트 메소드를 구현합니다.
온라인 접속 로그를 다른 프로그램으로 보내야 받을 수 있어요
파이썬을 이용해 구현할까 고민하기 시작했어요. 파이썬에도 tail -F를 구현하는 방법이 있지만 너무 번거롭고 효율성도 떨어지거든요
I 쉘이 네트워크 클라이언트를 구현할 수 있다는 것을 우연히 발견했습니다. 그리고 단 몇 줄의 코드로 이를 달성할 수 있습니다
먼저 코드:
trap "exec 8<&-;exec 8>&-" 0 file='/data/nginx/llogs/access.log' exec 8<>/dev/tcp/10.3.0.200/9001 tail -F "$file" | grep --line-buffered "sid">&8
매우 간단합니다. 실제 처리 논리 코드는 단 2줄입니다.
첫 번째 줄은 주로 프로그램 종료 상태를 캡처하고 종료 후 연결을 닫는 것입니다.
두 번째 줄은 로그 파일을 정의합니다.
세 번째 줄은 네트워크 연결을 설정합니다. Linux에는 특수 파일 /dev/(udp|tcp)/가 있습니다. ip/port
해당 네트워크 연결을 설정하기 위해 이 파일을 파일 설명자에 바인딩합니다. 파일 설명자는 3보다 큽니다. 네 번째 줄은 설정된 채널로 데이터를 보냅니다. grep에는 버퍼가 있으므로 기본적으로 데이터를 출력하지 않습니다. 버퍼가 가득 찰 때까지 --line을 추가해야 합니다. -buffered 매개변수, 라인 버퍼링을 사용하세요.
그렇지 않으면 서버에서 수신한 데이터에 줄 바꿈이 발생합니다.
이런 에이전트의 초간단 기능은 성능은 좋지만 단점이 있습니다
또는 네트워크가 좋지 않거나 에이전트가 종료될 수도 있습니다(이번에는 이 문제가 없었습니다. 모두 광섬유 인터넷이었습니다)
그래서 필요합니다 해당 모니터링 프로그램으로 에이전트를 감지하고 이상이 있을 경우 자동으로 재시작하거나, 네트워크 품질이 좋으면 사용을 고려해 보세요
.
위 내용은 쉘은 네트워크 클라이언트 메소드를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!