いくつかの VM を定義する Vagrant プロジェクトがあります。そのうちの 1 つで、いくつかのコマンドを実行してカーネル パラメータを調整し、リモートの場所からファイルをダウンロードし、デーモンを開始する必要があります。現在、私は次のように定義していますcookbooks/*/recipes/default.rb
:
execute "sudo tune-kernel-parameter"
execute "curl http://something/ > /tmp/some-file"
execute "sudo some-daemon --config /tmp/some-file"
私が最初のときはすべてうまくいきvagrant up
ます。しかしもちろん、マシンが再起動した場合、これらのコマンドは init スクリプトの一部ではないため、再度実行されることはありません。
VM を再起動するためにいつでも実行できると思いvagrant reload
ますが、直接再起動できるようにしたいのです。つまり、永続的な「サービス」を提供します。
上記のコマンドの一部(カーネル チューニング) は/etc
、これらのファイルの正しい構文を調べるために時間を費やしたい場合 (直接のコマンドが正しいことを確認する作業を既に行った後)、 のファイルを変更することで置き換えることができます。私がしたいことをしてください)。また、他のもの (デーモンの開始) については、定義済みのサービス、つまり、構成してリソース/etc
の使用を開始できるサービスを定義する Ubuntu パッケージを使用できる場合があります。service
ただし、上記のダウンロードのような特異なコマンドがあります (これはデーモンが開始する前に実行する必要があります)。おそらく、template
リソースを使用してスクリプトを定義し、プロビジョニング時にそれを開始するために/etc/init.d/
使用できます (ただし、シェフ、サービスが作成される前に init.d スクリプトを作成するテンプレートを実行する方法は、これが思ったよりもさらに多くの作業であることを意味します) )。service
しかし、プロビジョニング中とその後の再起動時に短いインライン スクリプトを実行するように単純に要求する標準的な方法はありませんか? execute
との間の何かservice
、例えば
init_script <<-END
sudo tune-kernel-parameter
curl http://something/ > /tmp/some-file
sudo some-daemon --config /tmp/some-file
END
(スクリプトは冪等であると想定しています。つまりvagrant provision
、同じ VM セッションで変更されたバージョンを再度実行しても問題ありません。killall some-daemon
最初に実行する必要がある場合、それは簡単です。)