我有一个 bash 脚本,每 10m 运行一次cron
。该脚本对某些值执行昂贵的计算(例如变量 x=值)。我需要将此值“缓存”2-3 小时。这个问题有哪些可能的解决方案?
我试过内存缓存但它似乎与 bash 配合得不好。
答案1
编写第二个脚本来执行实际计算并将结果保存到文件中:
# calculate $curval
printf '%s' "$curval" > /var/foo/value.txt
安排它cron
每 2-3 小时运行一次。
在“每 10 分钟”脚本中,只需从文件中读取当前值:
curval=$(< /var/foo/value.txt)
value.txt
一个很好的改进是,如果文件尚不存在,则从“每 10 分钟”脚本调用计算脚本。crontab
如果条目丢失,您甚至可以让它添加该条目。
答案2
我同意将结果写入文件,在文件中设置变量
curval=the_value
然后在shell(或另一个脚本)中
source current_variable_value_result_file
答案3
您可以将变量存储在简单的纯文本文件中。
我为此使用了两个 bash 函数:
# the cache file in /tmp
CACHE_FILE="/tmp/your-file.txt"
touch "$CACHE_FILE"
# Set a cache/key value in your text file us `=` as separator
function set_cache() {
echo -e "$1=$2" >> "$CACHE_FILE"
}
# grep the key in the cache file and extract the value using awk
function get_cache() {
grep -F "$1" "$CACHE_FILE" | awk -F"=" '{print $2}'
}
它远非完美,如果您的密钥包含您选择的分隔符值(此处),它就不起作用=
,但这是一个良好的开始,对我帮助很大。
我猜想第二个 cron 作业可以定期删除缓存文件。