URL에 있는 소스 코드에서 로컬 스크립트를 다시 로드하시겠습니까?

URL에 있는 소스 코드에서 로컬 스크립트를 다시 로드하시겠습니까?

나는 웹 페이지를 부팅할 때마다 로컬 파일에서 로드하는 매우 긴 스크립트(500줄 이상)를 가지고 있습니다. 스크립트의 소스 코드는 자주 업데이트되며 모든 사용자가 스크립트가 포함된 로컬 파일을 업데이트할 수 있도록 URL 아래에 표시됩니다(많은 사람들이 로컬로 로드하는 것을 선호하기 때문).

이 스크립트를 업데이트하지 않으면 내 사이트가 보안 취약성에 노출되는 경우가 많지만, 업데이트할 때마다 데이터를 복사하여 붙여넣는 대신 Cron 작업을 사용하여 로컬에서 자동으로 다시 로드하고 싶습니다(예: 0 0 1 * 0).

Unix에는 URL 액세스 가능 스크립트의 모든 데이터를 복사하여 로컬 스크립트 파일에 붙여 넣을 수 있는 방법이 있습니까?

나는 이것이 비슷한 rewrite를 포함할 것이라고 생각 << EOF > ... EOF하지만, 이번에는 Bash 프롬프트의 내 로컬 표준 입력에서 오는 대신 원격 파일에서 올 것입니다.

답변1

이를 수행하는 방법에는 최소한 두 가지가 있습니다.

방법 1 - 크론 작업에서 컬 사용:

사용합니다 curl(아직 설치되지 않은 경우 설치). curl일반적인 프로토콜(HTTP, HTTPS, FTP)을 사용하여 파일을 다운로드합니다. curlcron 작업을 사용하여 스크립트의 새 복사본을 주기적으로 다운로드 할 수 있습니다 . 전화 세부정보를 확인하세요 man curl.

curl -o /path/to/script http://www.example.com/script

프로덕션에서 실행된 스크립트와 다른 이름으로 스크립트를 다운로드할 수 있으며, 다운로드가 성공하면 mv프로덕션 스크립트를 덮어씁니다. 이는 다운로드 프로세스 중에 스크립트 호출과 관련된 문제를 방지하기 위한 것입니다.

방법 2 - 래퍼 스크립트 사용:

필요에 따라 스크립트를 다운로드하고 호출하는 래퍼를 작성합니다 exec(스크립팅 언어에 따라 다름). 예제는 Bash로 작성되어 다른 스크립팅 언어를 사용하여 논리를 쉽게 따라갈 수 있습니다. 예를 들어 로컬 스크립트의 이름은 real-script이고 URL은 이라고 가정합니다 http://www.example.com/real-script. 래퍼는 다음과 같습니다 wrapper-script.

#! /bin/bash

if [ -f /path/to/real-script ] ; then
# Local copy exists, download only if remote file is newer
  curl -z /path/to/real-script -o /path/to/real-script http://www.example.com/real-script
else
# Local copy does not exist, always download
  curl -o /path/to/real-script http://www.example.com/real-script
fi
chmod 755 /path/to/real-script
exec /path/to/real-script "$@"

실제 스크립트처럼 이 래퍼 스크립트를 호출합니다. 로컬 복사본이 없거나 로컬 복사본이 원격 파일보다 오래된 경우 래퍼는 실제 스크립트를 다운로드한 다음 전달된 모든 인수의 새로운 복사본을 실행합니다.

기존 로컬 복사본이 5분 또는 허용되는 간격보다 오래되지 않은 경우 최신 버전을 찾지 않는 것이 좋습니다.

프로덕션에서 이 방법을 사용할 때는 일부 오류 검사가 필요할 수 있습니다.

관련 정보