刷新正在运行的生产环境的正确方法是什么

刷新正在运行的生产环境的正确方法是什么

我在这里没有展示太多代码,但我有一个修复的要求。我们的文件包含 100 多个函数,这些函数在生产中的各种 shell 脚本中使用。我们将其命名为。

functions.sh

到目前为止,每个脚本都调用其中的“functions.sh”文件,以便它可以访问更新的函数。像这样

#!/bin/bash
# comment
# comment
# Comment

./path/function.sh

echo "Date" > logging()
..

现在我们被要求取消这个调用:

./path/function.sh

来自未来将开发的脚本。 (以便可以添加更多此类文件)并确保一旦新的“functions.sh”部署到生产环境中,最新的函数就会在环境中自动刷新,并且任何脚本都可以直接使用其中定义的函数。我可以在 .bashrc 文件中将其称为

~/.functions.sh 

或者还有什么我们必须做的,请记住脚本将通过 crontab 以非交互模式执行。 (所有脚本都是 bash 脚本)任何帮助都会受到赞赏。

谢谢

答案1

https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files

对于非交互式 shell(例如通过 cron 运行脚本),bash 使用BASH_ENV环境变量作为源文件的名称。

因此,为了获得最大的灵活性,您可以执行以下操作:

/some/path
├── functions.d
│   ├── func1.sh
│   ├── func2.sh
│   ├── ...
│   └── funcN.sh
└── functions.sh

并且functions.sh可能是

#!/usr/bin/env bash
func_dir="${BASH_SOURCE[0]%/*}/functions.d"
if [[ -d "$func_dir" ]]; then
    for f in "$func_dir"/*.sh; do
        if [[ -r "$f" ]]; then
            . "$f"
        fi
    done
fi

在您的 crontab 文件中,添加

BASH_ENV=/some/path/functions.sh

因此,您所要做的就是将 .sh 文件添加到该目录,您的 cron 脚本将获取它。

这使您可以灵活地创建每个仅包含一个函数定义的文件。不再有巨大的库文件。

相关内容