cronでも、すべてのユーザーのパスをグローバルに変更します。

cronでも、すべてのユーザーのパスをグローバルに変更します。

CentOS 6を使用してSGEクラスタを設定しています。私のシステム管理者は、RPMを介して(例えば、make installなどを介して)インストールされていないアプリケーションをインストールしており、これらのアプリケーションは非標準ディレクトリにある必要があります/share/apps/install/bin/。この場合、現在このパスはほとんどのセッション(login、qloginなど)に追加されます。 .)、/share/apps/etc/environment.shこのパスを介してPERL5LIBにもいくつかの内容が追加されます /etc/bashrcenvironment.sh

私が経験している問題は、/share/apps/install/bincrontabから呼び出されるような特定のインスタンスに追加されないことです。

私の個人的な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

拡張子を持つファイルは、.shBash や Zsh などのシェルから検索されます。拡張子を持つファイルは.cshCsh と 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)が作成されます。これは、標準のクラスタ設定とは大きく異なる環境を必要とするツールに使用されます。

関連情報