複数のユーザーによる複数の更新による問題を回避するために、crontab を効果的に管理するにはどうすればよいですか?

複数のユーザーによる複数の更新による問題を回避するために、crontab を効果的に管理するにはどうすればよいですか?

多くのユーザーが更新する crontab があります。問題は、このため、誰が cronjob のどのような変更を行ったかを知るのが容易ではないことです。

少なくとも何が変更されたかを確認できるように、以前保存したバージョンを使用して crontab を実行するスクリプトを作成しようと考えていましたdiffが、これには標準的な解決策があるのではないかと思いました。crontab を管理するための最良の方法は何ですか?

答え1

転覆

私は crontab の内容を Subversion の管理下に置き、 を通じてのみこのユーザーにアクセスを許可しますsudo。具体的には、 を通じてのみ、subversion からヘッドを取得し、それをこの特定のユーザーの最新の crontab としてインストールする コマンドへのアクセスを許可しますsudo。これにより、次のことが実現されます。

  • 誰が何をしたかの監査証跡
  • 問題が発生した場合に以前のcrontabファイルにロールバックする機能
  • この特別アカウントに対してオペレーターが過度の権限を持つことを防ぐ

過度に複雑に思えるかもしれませんが、小さな部分に分割すれば、私が説明した内容はそれほど複雑ではありません。

マルチクロン

別の方法としては、次のようなツールやスクリプトを使う方法があります。マルチクロンこのツールを使用すると、crontab エントリの外部にある crontab データを管理できるため、誰がいつこれらの変更にアクセスできるかをより適切に制御できます。

Subversion の使用例

SVN リポジトリを設定すると仮定すると、sudoユーザーが次のような操作を実行できるエントリを作成できます。

$ sudo deploy_app_cron.bash

このスクリプトの内部では、次のようなことが可能です。

svn cat file:///home/saml/svnrepo/app_cron_data.txt | crontab -u saml -

ファイルの内容app_cron_data.txt:

$ svn cat file:///home/saml/svnrepo/app_cron_data.txt
*/5 * * * * /path/to/job -with args"

使用例ループ

そこで、userA は crontab エントリを更新したいと考えています。まず、次の操作を実行します。

$ cd $HOME/somedir
$ svn co file:///home/saml/svnrepo/ mywksp
A    mywksp/app_cron_data.txt
$ cd mywksp

ここで、crontab ファイルにいくつかの編集を加え、app_cron_data.txt完了したらリポジトリにコミットします。

$ svn commit -m "some msg.." app_cron_data.txt

これらの変更を展開するには、次のコマンドを実行しますsudo

$ sudo deploy_app_cron.bash

参考文献

答え2

正しい解決策は、cron を適切に使用し、各ユーザーにユーザーごとの crontab を持たせることです。このように crontab を設定する理由が見落とされているでしょうか。この「統合 crontab」が克服しようとしている問題に対して、ユーザーごとの crontab とその他の回避策を使用する方が望ましいかもしれません...?

関連情報