从 URL 可用源代码重新加载本地脚本?

从 URL 可用源代码重新加载本地脚本?

我有一个很长的脚本(> 500 行),我从本地文件加载到网页的每次引导中。该脚本的源代码经常更新并在某个 URL 下呈现,以便所有用户都可以更新包含该脚本的本地文件(因为很多人更喜欢在本地加载它)。

不更新此脚本经常会暴露我的网站存在安全漏洞,但我不想在每次更新时复制和粘贴数据,而是想使用 Cron 任务自动将其重新加载到本地(例如0 0 1 * 0)。

Unix 中有没有办法将 URL 可访问脚本中的所有数据复制并粘贴到本地脚本文件中?

我想这将包括类似的重写<< EOF > ... EOF,但这次,不是来自我自己在 Bash 提示符中的本地标准输入,而是来自远程文件。

答案1

至少有两种可能的方法可以做到这一点:

方式 1 - 在 cron 作业中使用curl:

使用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 分钟或您允许的任何时间间隔,您可能还希望避免寻找较新的版本。

请注意,在生产中使用此方法时,可能需要进行一些错误检查。

相关内容