Centos

全域更改所有使用者的路徑,即使在 cron 中

  • March 23, 2016

我們正在使用 CentOS 6 設置 SGE 集群。我的系統管理員正在安裝不是通過 RPM 安裝的應用程序(即通過 make install 等其他方式)應該放在非標準目錄中,在這種情況下類似於/share/apps/install/bin/. 此路徑目前已添加到大多數會話(登錄、qlogin 等)/share/apps/etc/environment.sh中,由/etc/bashrc. environment.sh還向 PERL5LIB 附加了一些東西。

我遇到的問題/share/apps/install/bin是沒有添加到某些實例中,例如從 crontab 中呼叫的東西。

我知道我可以PATH=/bin:/usr/bin:/blah/blah:...在我的個人 crontab 或任何給定的腳本或 crontab 條目中手動明確地設置,但我希望在外部某處有一個設置,/etc/profile或者/etc/bashrc會將非標準.../bin目錄放入所有使用者的所有 PATH 中.

添加一個文件,其中包含您希望PATH/etc/profile.d. 這些文件被設置為來自 shell,例如 Bash、Csh Zsh 或 tcsh。

例子

我們需要將以下值添加到我們的 PATH 中。

/usr/local/share/bin

所以我們創建了一個文件,/etc/profile.d/ourstuff.sh,其中包含以下行:

export PATH=/usr/local/share/bin:$PATH

帶有副檔名的文件.sh來源於 shell,例如 Bash 和 Zsh。帶有副檔名的文件.csh來源於 Csh 和 tcsh。

編輯#1 - 跟進

OP問了以下後續問題。

是的,但是 cron 作業呢?有沒有辦法讓路徑甚至在那裡?cron 似乎沒有呼叫 /etc/profile 或 /etc/bashrc。

我對此作出回應:

糾正它不會也不會。您需要設置SHELL=/bin/bashin cron 以覆蓋預設 shell(通常是/bin/sh)。您還可以為使用者 crons 設置 this,BASH_ENV="$HOME/.bashrc",為系統 crons 設置 this BASH_ENV="/root/.bashrc",. 將是解決這個問題的一種方法。

我強烈建議您不要這樣做。讓需要特定環境的腳本自己設置。不要試圖在全球層面解決所有問題!

您可以將環境變數定義放入/etc/environment(假設您的系統pam_env為所有服務載入,這應該是所有現代非嵌入式 Linux 系統的預設設置)。

請注意,您只能放置靜態環境變數定義,格式為VARIABLE=VALUEVARIABLE="VALUE",每行一個定義。你不能有任意的shell命令,你不能通過寫來引用另一個變數的值(在值中FOO=hello+$BAR放置一個文字)等等。只要你堅持簡單的賦值,你會沒事的(請注意,您不能在那裡使用使用者的主目錄:所有使用者的值必須相同)。$``FOO``PATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin

引用自:https://unix.stackexchange.com/questions/94495