実行中の本番環境を更新する正しい方法は何ですか?

実行中の本番環境を更新する正しい方法は何ですか?

これには多くのコードは表示されませんが、修正要求があります。私たちのファイルには、本番のさまざまなシェルスクリプトで使用される100以上の関数が含まれています。我々はそれを命名した。

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

非対話型シェル(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スクリプトはそのファイルを選択します。

これは、それぞれ1つの関数定義のみを含むファイルを生成できる柔軟性を提供します。もう巨大なライブラリファイルはありません。

おすすめ記事