CentOS 6を使用してSGEクラスタを設定しています。私のシステム管理者は、RPMを介して(例えば、make installなどを介して)インストールされていないアプリケーションをインストールしており、これらのアプリケーションは非標準ディレクトリにある必要があります/share/apps/install/bin/
。この場合、現在このパスはほとんどのセッション(login、qloginなど)に追加されます。 .)、/share/apps/etc/environment.sh
このパスを介してPERL5LIBにもいくつかの内容が追加されます /etc/bashrc
。 environment.sh
私が経験している問題は、/share/apps/install/bin
crontabから呼び出されるような特定のインスタンスに追加されないことです。
私の個人的なcrontabまたは特定のスクリプトまたはcrontabエントリで手動で明示的に設定できることを知っていますが、外部のどこかに設定をしたり、すべてのユーザーへのすべてのパスに非標準ディレクトリを配置したいと思いますPATH=/bin:/usr/bin:/blah/blah:...
。/etc/profile
/etc/bashrc
.../bin
答え1
PATH
に含める値を含むファイルを追加します/etc/profile.d
。これらのファイルは、Bash、Csh、Zsh、または tcsh などのシェルから検索されるように設定されます。
はい
PATHに次の値を追加する必要があります。
/usr/local/share/bin
/etc/profile.d/ourstuff.sh
だから私たちは次の行でファイルを作成しました。
export PATH=/usr/local/share/bin:$PATH
拡張子を持つファイルは、.sh
Bash や Zsh などのシェルから検索されます。拡張子を持つファイルは.csh
Csh と tcsh で提供されます。
編集#1 - フォローアップ
OPは次の質問をしました。
はい、しかしクローンの仕事はどうですか?そこでも道を見つける方法はありますか? cronが/etc/profileまたは/etc/bashrcを呼び出さないようです。
これに対する私の答えは次のとおりです。
それを修正することはそうではありません。SHELL=/bin/bash
デフォルトのシェル(通常)をオーバーライドするには、cronを設定する必要があります/bin/sh
。ユーザー crons (BASH_ENV="$HOME/.bashrc") にこれを設定し、システム crons に設定することもできますBASH_ENV="/root/.bashrc"
。これがこの問題を解決する1つの方法です。
私はこれをしないことを強くお勧めします。特定の環境が必要なスクリプトを自分で設定できるようにします。すべての問題を世界中で解決しようとしないでください!
答え2
環境変数定義を入れることができます/etc/environment
(システムがロードされていると仮定)。pam_env
これは、すべてのサービスのすべての最新の非組み込みLinuxシステムのデフォルト設定である必要があります。
静的環境変数定義は、1行に1つずつ、またはVARIABLE=VALUE
形式でのみ配置できます。VARIABLE="VALUE"
任意のシェルコマンドは使用できず、書き込みFOO=hello+$BAR
(値にリテラル入力)などを介して$
他の変数の値を参照することはできません。FOO
のような単純な割り当てに固執する限り、これは問題ありませんPATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin
(ここではユーザーのホームディレクトリが利用できないことに注意してください。値はすべてのユーザーに対して同じである必要があります)。
答え3
結局、私たちはルーティングの問題を防ぐための多面的なソリューションを開発しました。ユースケースに応じて、次のいずれかを使用しました。
- バイナリがパスにあることを期待する代わりに、非標準の場所にインストールされているバイナリへの絶対パスを使用してください。これは、非標準の外部依存関係がほとんどないか、独立して動作するツールに使用されます。
- 必要に応じて環境を設定および/または
PATH=...
スクリプト内でsource $HOME/.bashrc
必要に応じて実行するツール用のラッパースクリプトを生成して使用します。これは他のツールが必要ですが、クラスタで実行できるツールに使用されます。 - バイナリとより複雑な設定を含むコンテナ(私たちの場合はDocker)が作成されます。これは、標準のクラスタ設定とは大きく異なる環境を必要とするツールに使用されます。