4

EC2 インスタンスの crontab からジョブを実行するように設定するレシピがあります。私が実行しているレシピの例を次に示します。

cron "examplejob" do
 minute "0"
 hour "2"
 command "job"
 user "job"
end

これはうまくいきます。この cron ジョブに加えて、crontab でいくつかの環境変数も設定したいと考えています。これを読むと、「path」属性を使えば可能のようです。ただし、これを実装する方法の具体的な例を見つけることができません。

私は試した:

cron "env" do
 path "MY_VAR=/path/for/variable"
end

しかし、これはうまくいきません。環境変数を crontab の上部に設定するにはどうすればよいですか? どんな洞察も大歓迎です!ありがとう。

4

2 に答える 2

5

あなたが探している答えenvironmentは、ハッシュオブジェクトを期待する属性だと思います。

http://docs.opscode.com/chef/resources.html#argumentsおよびhttps://github.com/opscode/chef/commit/96ef7d770a7d898fdce097c7fda9039abf7bf485を参照してください

カスタム環境変数を設定するには、次のように記述します。

my_env_vars = {"env1" => "val1", "env2" => "val2"}    

cron "env" do
 environment my_env_vars
 command "/path/to/job -someoption"
end

Chefはハッシュを繰り返し処理し、次のように表示されます。sudo crontab -e

# Chef Name: env
env1=val1
env2=val2
* * * * * /path/to/job -someoption

クイックノート:Chef 10.16.2を搭載した私のマシンでは、cronスタンザ内で直接ハッシュを渡すと、構文エラーが返されます。syntax error, unexpected tASSOC, expecting '}'とにかくハッシュを直接渡す必要があるわけではありませんが、他の誰かが私の同じ間違いを繰り返す可能性があるので、言及する価値があると思いました。ハッシュを変数にスローするとすぐに、すべてが期待どおりに機能します。

于 2013-02-25T22:12:54.327 に答える
-1

環境に対応する最上位のキーを持つデータ バッグ。Opscode wiki には、これを行う方法の簡単で要点の説明があります。データ バッグと環境前の例のとおりです。

cron "[node.chef_environment]" do
 path "bag_item[node.chef_environment]["path_for_variable"]"
end

あるいは、より凝ったものにしたい場合は、データ バッグでテンプレートを使用し、レシピ内でテンプレートを呼び出すだけです。これは、異なる変数を使用して同じ関数を呼び出す crontab がある場合に適用されます。そうすれば、必要なときにいつでもテンプレートを編集でき、環境全体に反映されます。

于 2012-10-17T20:57:16.320 に答える