全域更改所有使用者的路徑,即使在 cron 中
我們正在使用 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/bash
in cron 以覆蓋預設 shell(通常是/bin/sh
)。您還可以為使用者 crons 設置 this,BASH_ENV="$HOME/.bashrc",為系統 crons 設置 thisBASH_ENV="/root/.bashrc"
,. 將是解決這個問題的一種方法。我強烈建議您不要這樣做。讓需要特定環境的腳本自己設置。不要試圖在全球層面解決所有問題!
您可以將環境變數定義放入
/etc/environment
(假設您的系統pam_env
為所有服務載入,這應該是所有現代非嵌入式 Linux 系統的預設設置)。請注意,您只能放置靜態環境變數定義,格式為
VARIABLE=VALUE
或VARIABLE="VALUE"
,每行一個定義。你不能有任意的shell命令,你不能通過寫來引用另一個變數的值(在值中FOO=hello+$BAR
放置一個文字)等等。只要你堅持簡單的賦值,你會沒事的(請注意,您不能在那裡使用使用者的主目錄:所有使用者的值必須相同)。$``FOO``PATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin