動的 crontab ファイル?

動的 crontab ファイル?

静的ファイルを読み取る代わりに、シェル スクリプトの出力から cron に指示を受け取らせることは可能ですか?

多数のマシン間で crontab を管理しようとしていますが、マシンごとに個別の crontab ファイルを維持するのは面倒です。代わりに、特定のマシンがそのジョブに割り当てられているかどうかに基づいて、各ジョブの crontab 行を出力するシェル スクリプトを cron で実行したいと思います。これは可能ですか?

PS: この目的のために Puppet/Chef などを推奨する人もいますが、この問題だけを処理するにはやりすぎだと思います。

答え1

ほとんどのディストリビューションでこれを行う最も簡単な方法は、Puppet/Chef などの自動デプロイメント ツールと /etc/cron.d ディレクトリを使用することだと思います。そのディレクトリに crontab を配置できますが、通常の形式ではなく次の形式を使用します。

* * * * * <user> <command>

cron を実行するユーザーはどこにいますか。

Puppet はやり過ぎだと思われるかもしれませんが (そうではありません)、ディレクトリ部分は他のソリューションにも当てはまります。

答え2

はい、もちろん可能です。crontab 出力を生成するために必要なスクリプトを設定し、それをターゲット サーバーに scp するだけです。

そこで、静的 cron ジョブは、都合のよい場所から、実行する crontab を具体的に読み取ることができます。

答え3

これはまさに人形とその仲間たちの本来の使用目的です。

crontabディストリビューションのパッケージ管理による設定方法が気に入らない場合は、puppet エージェントを実行することが唯一の選択肢になります。

外部スクリプトは、パペット マスター上に 1 か所に、すべてのマシンに対して配置されます。

外部スクリプトの使用を検討するほどの問題であれば、puppet をお勧めします。Chef でも同様のことは確実にできます。

私は複数のマシンを管理するためだけに puppet を使い始めましたが~/.ssh/authorized_keys、これは同様の「小さな」問題です。

答え4

よくあるトリックは、crontab 全体を更新する crontab エントリを作成することです。シェル スクリプトが に不正なデータを送信しない限り、これは正常に機能しますcrontab

ただし、管理が簡単な別のアプローチを提案します。スクリプトを頻繁に実行する静的 crontab エントリを用意します。スクリプトに、何かを実行するタイミングを判断するという面倒な作業をすべて実行させます。この方法では、各マシンで実行されている可能性のあるすべてのことをスクリプトに知らせることなく、crontab を通常の crontab として使用できます。

関連情報