多くのユーザーが更新する 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 とその他の回避策を使用する方が望ましいかもしれません...?