AWS EC2 인스턴스에 SSH로 접속하여 API를 시작하고 있습니다. API가 계속 실행되고 요청을 수락하기를 원합니다.
그렇다면 tmux가 이를 수행하는 좋은 방법일까요? 아니면 더 좋은 방법이 있나요? 내 생각에는 tmux와 screen이 더 긴 작업에 더 적합하다는 것입니다. API를 무기한 실행하는 데 적합한지 확실하지 않습니다.
답변1
tmux
screen
어떤 이유로든 대상 시스템에 대한 연결이 중단 되더라도 하나 이상의 셸 세션을 활성 상태로 유지하거나 단일 연결을 통해 여러 셸 세션을 다중화하는 데 사용됩니다 ( ssh
여러 터미널을 열 수 있는 것과 유사하다고 생각하세요). 창은 있지만 GUI 인터페이스는 없음).
나는 당신을 믿습니다할 수 있다API 서비스를 실행하기 위한 tmux
것이지만 AWS EC2 인스턴스를 사용하는 경우 systemd
(많은 최신 Linux 배포판처럼) "올바른" 접근 방식은 *.service
서비스를 시작하고 중지하는 데 필요한 명령과 해당 요구 사항을 설명하는 파일을 작성하는 것일 수 있습니다( 즉, 서비스를 성공적으로 시작하려면 어떤 다른 서비스를 실행해야 하는지)
그런 다음 서비스 파일을 /etc/systemd/system/
디렉터리에 배치하고 실행한 systemctl daemon-reload
다음 systemctl start your-API.service
서비스를 사용하고 운영 할 수 있습니다 systemctl stop your-API.service
. 표준 시스템 서비스와 같습니다. 왜냐하면 systemd
그것에 관한 한~ 할 것이다시스템 서비스입니다.
이렇게 하면 API에 대한 리소스 제한을 쉽게 지정할 수 있습니다. 예를 들어 API가 오용될 경우 발생할 수 있는 피해를 제한할 수 있습니다. API 서비스가 자동으로 시작되도록 하려면 어떻게 해야 합니까? systemctl enable your-API.service
이제 끝났습니다.
.service
API 서비스가 충돌하거나 자체적으로 종료되는 경우 API 서비스가 자동으로 다시 시작되도록 파일에 지정할 수도 있습니다 . API 서비스를 정기적으로 호출하는 경우 sd_notify(3)
서비스 가 중단된 것처럼 보이면 자동으로 다시 시작할 "WATCHDOG=1"
수도 있습니다 .systemd
몇 가지 보안 이점도 있습니다. systemd는 관리하는 각 서비스에 대해 "제어 그룹"을 생성하고 해당 제어 그룹은 해당 서비스에서 생성된 모든 하위 프로세스에 의해 상속됩니다. 따라서 서비스가 "미친" 상태가 되어 10,000개의 하위 프로세스를 생성하더라도(아마도 인터넷상의 누군가가 서비스를 남용하려고 하기 때문에) 간단하게 systemd stop your-API.service
(또는 systemd kill your-API.service
서비스를 중지하려는 경우)지금서비스 종료를 제어하는 데 신경 쓰지 않아도 됨) 모든 프로세스를 정리하는 데 충분합니다. 올바른 프로세스를 수동으로 찾고 해당 프로세스의 표현식을 종료하는 것에 대해 생각할 필요가 없습니다 pkill
.pgrep
원하는 경우 systemd도 서비스를 제공할 수 있습니다 chroot
(특정 디렉터리와 해당 하위 디렉터리만 보도록 제한). 또는 전용 사용자 계정에서 서비스를 실행하는 경우(가능한 경우 항상 좋은 방법임) 해당 프로세스(및 생성된 모든 하위 프로세스)를 차단하여 필요한 경우에도 전체 sysadmin 권한을 얻을 수 있습니다 root
. 서비스 파일에 설정하려면 NoNewPrivileges=true
일종의 악용을 통해 달성할 수 있습니다.*.service
자세한 내용과 예시는 다음을 참조하세요.이 질문은 여기에 있습니다. Unix&Linux.SE, 또는 시스템의 기존 문서를 연구 *.service
하고 이를 참조하여 개별 키워드의 의미를 확인 man systemd.service
하십시오 .man systemd.exec