私はWebページを起動するたびにローカルファイルからロードする非常に長いスクリプト(500行以上)を持っています。スクリプトのソースコードは頻繁に更新され、すべてのユーザーがスクリプトを含むローカルファイルを更新できるようにURLの下に表示されます(多くの人がローカルにロードすることを好むため)。
このスクリプトを更新しないと、サイトがセキュリティの脆弱性にさらされることがよくありますが、更新するたびにデータをコピーして貼り付けるのではなく、Cronジョブを使用してローカルで自動的に再読み込みしたいと思います(例:)0 0 1 * 0
。
Unixには、URLアクセス可能スクリプトのすべてのデータをコピーしてローカルスクリプトファイルに貼り付ける方法はありますか?
私はこれに似たような書き換えを含めると思います<< EOF > ... EOF
が、今回はBashプロンプトの私のローカル標準入力から来るのではなく、リモートファイルから来ます。
答え1
これを行う方法は少なくとも2つあります。
方法1 - クローン操作でカールを使用する:
使用しますcurl
(まだインストールされていない場合はインストール)。curl
一般的なプロトコル(HTTP、HTTPS、FTP)を使用してファイルをダウンロードします。curl
cronジョブを使用して、スクリプトの新しいコピーを定期的にダウンロードできます。電話の詳細を確認してください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分または許容間隔よりも古い場合は、最新バージョンを見つけないことをお勧めします。
本番環境でこの方法を使用する場合は、いくつかのエラーチェックが必要な場合があります。