
新しい Ubuntu のインストールでは、ユーザーは次のPATH
とおりです。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
しかし、同じユーザーの cron 環境では次のようになります。
/usr/bin:/bin
ホームディレクトリにあるすべてのユーザーのドットファイルを調べましたが、そこには何も変更されていませんPATH
。
何が変更されるのですかPATH
? cron はなぜそれを使用しないのですかPATH
?
答え1
なぜそうなるのかという質問に関して、それを説明するマニュアル ページはcrontab(5)
、つまり からアクセスできるページですman 5 crontab
(セクション 1 のデフォルトのページではありません)。cron デーモンはシェル セッションをエミュレートしようとはせず、cron ジョブを実行するためのクリーンで最小限の環境を設定し、次に crontab ファイルが独自の任意の環境変数を設定できるようにします。Debian に同梱されている新しい cron デーモンには、pam_env
などのための追加の規定もいくつかあります。
答え2
Cron はログイン シェルでプロセスを実行しません。このため、プロセスの実行時にすべての一般的なスクリプトがソース化されるわけではありません。
ログイン シェル内からプロセスを実行すると、ユーザーの環境が複製されます。
次のような内容を crontab に入力し、2 つの出力を比較します。
*/1 * * * * /usr/bin/env > /tmp/env
*/1 * * * * /usr/bin/bash -l -c /usr/bin/env > /tmp/bashenv
ご覧のとおり、 には、使用されていない/tmp/bashenv
環境変数が多数あります。これは、 を使用してログイン シェルで が呼び出された/tmp/env
ためです。env
bash -l