시스템 서비스가 자체적으로 업데이트될 수 있습니까?

시스템 서비스가 자체적으로 업데이트될 수 있습니까?

안녕하세요, 무결점 서버 여러분,

스스로 업데이트할 수 있는 시스템 서비스를 작성하고 싶습니다.

특히 5분마다 Amazon S3에서 바이너리와 파일의 새 버전을 확인해야 합니다 .service. 업데이트된 경우 다운로드하여 교체한 다음 다시 시작해야 합니다.

불행히도 systemd는 사용 중인 파일의 수정을 허용하지 않는다는 것을 알고 있습니다.

이를 달성하는 표준 방법이 있습니까?

감사해요!

편집: 명확히 하기 위해 단일 서비스로 이 작업을 수행할 수 있는지 묻고 있습니다. 나는 서로를 업데이트하는 한 쌍의 서비스를 가질 수 있다는 것을 알고 있지만 그것은 우아하지 않은 것 같습니다.

답변1

시스템 .service 파일 또는 프로그램 실행 파일과 관련된 파일을 업데이트하는 것은 다른 파일을 업데이트하는 것과 동일합니다.

실제로는 Ansible과 같은 구성 관리를 사용하여 이 작업을 수행해야 하지만, 그대로 수행하려면 일반 워크플로에서 다음을 수행하는 bash/python 스크립트를 사용할 수 있습니다.

  1. 웹 서버/s3/etc에서 파일을 가져옵니다.
    • 빠른 md5sum 검사를 수행하여 차이점을 비교할 수 있습니다. 또는 날짜, 기타 메타데이터를 비교하여 파일이 새 파일인지 변경되었는지 확인합니다.
  2. 필요에 따라 파일을 교체하십시오.
    • 파일을 사용중인 경우에는 사전에 stop서비스( ) 가 필요할 수 있습니다 .service <servicename> stop
  3. systemctl daemon-reload변경 사항이 있는지 서비스 파일을 "다시 검색"하도록 systemd에 지시하려면 실행하세요 .
  4. 문제의 서비스를 다시 시작/다시 시작합니다.

그런 다음 해당 스크립트를 cron이나 시스템 타이머로 로드하여 일정에 따라 실행할 수 있습니다.

관련 정보