既存の環境変数を使用してcronコマンドを実行するには?

既存の環境変数を使用してcronコマンドを実行するには?

既存の環境変数を使用してcronコマンドを実行するには?

シェルプロンプトにある場合は、echo $ORACLE_HOMEパスを入力してインポートできます。これは私の環境変数の1つです~/.profile。ただし、cronスクリプトからロードされていないため、変数が設定されていないため、~/.profileスクリプトは失敗します。$ORACLE_HOME

存在するこの問題作成者は、~/.cronfilecronの変数を設定する構成ファイルを生成すると述べ、次にディレクトリに保存したスクリプトにすべての~/Croncronコマンドをロードする回避策を取りました。このようなファイルは~/.cronfile良い考えのように聞こえますが、残りの答えは少し面倒で、誰かが同じ結果を得るためのより簡単な方法を教えてくれることを願っています。

スクリプトの先頭にこのようなものを追加できるようですが、重複する可能性がsource ~/.profileあります。

それでは、対話型シェルプロファイルからcronスクリプトロード変数をどのように作成できますか?

答え1

crontabでコマンドを実行する前に. $HOME/.profile

0 5 * * * . $HOME/.profile; /path/to/command/to/run

Cronシェルについて知られているものはありません。シェルはシステムによって起動されるため、最小限の環境を持ちます。必要なものがあれば、自分で持っていく必要があります。

答え2

私が見つけやすくするもう1つの選択肢は、cronを使用してスクリプトを実行し、スクリプトに環境を含めることです。

crontab -eファイルから:

SHELL=/bin/bash

*/1 * * * * $HOME/cron_job.sh

cron_job.shファイルから:

#!/bin/bash
source $HOME/.bash_profile
some_other_cmd

.bash_profileソース以降のすべてのコマンドは、ログインしているかのように環境を持ちます。

答え3

私がより簡単に見つけた別のオプションは、cronを使用してスクリプトを実行し、bashにログインするように指示することでした(したがって/etc/profile.d/...環境定義を使用します)。

crontab -eファイルから:

*/1 * * * * bash -l -c './cron_job.sh'
*/1 * * * * bash -l -c 'php -f ./cron_job.php'

ソース以降のすべてのコマンドは、.bash_profileログインしているかのように環境になります。

答え4

この構文は間違いなく役に立ちます。構文はわかりませんが、うまくいきます。 Oracleは、Oracle Configuration Managerをcrontabにデプロイするときにこの構文を使用するため、これが正しい解決策であると思います。

0 5 * * * SOME_ENV_VAR=some_value some_command some_parameters

関連情報