web-dev-qa-db-ja.com

/ etc / environmentで設定された変数がcron環境に表示されるのはなぜですか?

長い間、私はcronで必要な環境を考えるのに慣れていました。基本的にはcrontab自体で設定する必要がありました。「異なる環境」を参照してください。おそらくここでトップアンサー: crontabが機能しない理由

しかし...最近のUbuntu 14.04インストールでは、次のようなcrontabがあります。

*/1 * * * * env > /tmp/cron.env

次のような/ etc/environmentファイル:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
RACK_ENV=production
LC_ALL=en_US.UTF-8
FROM_ETC_ENVIRONMENT=testing

出力cron.envファイルは次のようになります。

FROM_ETC_ENVIRONMENT=testing
HOME=/home/devops
LOGNAME=devops
RACK_ENV=production
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
Shell=/bin/sh
LC_ALL=en_US.UTF-8
PWD=/home/devops

fROM_ETC_ENVIRONMENTは、その一意の名前で作成した変数であり、他の場所から送信されないようにするためです。

私はこれがいつ変更されたかなどに関するドキュメントを探しました...私の質問は本当にこれだと思います:

これは、今後Ubuntu 14.04から信頼できる動作ですか? (誰がいつそれが導入されたのか知っていますか?それとも常にそうでしたか、私はそれを認識していませんでした- の一番上の答えは、crontabが機能しない理由 リンクcronは/ etc/environmentからまったく読み取らないと言いますが、私のテストでは間違っているようです。

3
Kem Mason

その答えは時代遅れです(少なくとも、そのセクションは 2011 からのものです)。 /etc/pam.d/cronを検査する場合:

$ grep pam_env /etc/pam.d/cron
# Read environment variables from pam_env's default files, /etc/environment
# and /etc/security/pam_env.conf.
session       required   pam_env.so
session       required   pam_env.so envfile=/etc/default/locale

pam_env/etc/environmentをロードするPAMモジュールであり、ご覧のとおり、少なくとも14.04以降はcronによって使用されています。そして、12.04システムをチェックしましたが、cron用にpam_envがロードされていました。

6
muru