質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

4回答

14260閲覧

cronではなぜbash_profile等が読み込まれていないのでしょうか?

yoppy0066

総合スコア293

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/04/13 05:42

cronを設定したユーザーで実行されるため、読み込むものかと思っていたのですが、なぜ読み込まれないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

おそらくは、cronが「バッチで自動的に処理されるもの」なのでユーザーのログイン設定に左右されないことを前提に書くべきものという考えからだと思います。

投稿2017/04/13 05:47

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

bash は次のいずれかの条件が満たされないと、/etc/profile や ~/.bash_profile といったファイルを読み取らない、という挙動をします。

  • 対話的なシェルとして起動された(stdin/stdoutとも端末に紐づいていて -c オプション無し、あるいは -i オプションを指定された)
  • --login オプションを付けて起動された

※上の条件を満たしていても、--noprofile オプションを付けていると読みとらない

cron で bash スクリプトを を起動する際にはどちらの条件も満たさないため、読み込まれていない、ということになります。

投稿2017/04/13 06:02

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoppy0066

2017/04/13 06:59

ありがとうございます。
guest

0

よくまとまっているページがありました。参考まで。
bashの設定ファイル(.bash_profile, .bashrc等)がどんなときに読み込まれるかまとめ

投稿2017/04/13 06:12

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoppy0066

2017/04/13 07:00

ありがとうございます。参考にさせて頂きます。
guest

0

cronがパスなどを読み込まない理由は、
ユーザーがログイン時に読み込む初期シェルの設定があるからです。
/etc/passwdなどで設定しています。

もしそのユーザーがbashを使っているならば、
.bash_profile.bashrcに環境変数やエイリアスを書きますが、
cshを使っているならば.chsrc、tcshなら.tcshrcになるからです。

Linuxが、bashを利用しているので.bashrc.bash_profileで設定していると思われがちですが。

もう少しcronについて説明すると、
crontab -lなどで出てくる設定値は、ユーザーにより使っているファイルが異なっています。
#実体はスプール領域 /var/spool/cron/[ユーザー名]に格納されています。

cronデーモンは1分ごとに起動しているデーモンになっており、
/etc/crontab/etc/cron.d/を読み込んでいます。

もし必ず環境変数を読み込みたいのであれば、先頭に入れてあげれば良いです。
#ただしお薦めしません。cronが実行するシェルの中で指定してあげるべきです。

cron

1SHELL=/bin/bash 2PATH=/sbin:/bin:/usr/sbin:/usr/bin 3MAILTO=root 4HOME=/ 5 6# * * * * * user-name command to be executed

投稿2017/04/13 07:18

lazhuward

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問