10

git と fab を使用してサーバーにプッシュするプロジェクトがたくさんあります。それらは Django サイトの負荷です。これらのサイトの一部には cron ジョブがあります。

次のことができる状況になりたいと思います。

  • ローカルでファイルを編集し、fab コマンドを実行して、サイトの cron ジョブを管理します (たとえばfab save deploy、現在私が行っているように)

  • 新しいジョブをリモートでインストールし (のみ)、古いジョブを置き換えます (毎回ジョブを複製する必要はありません)。

  • 高度にカスタマイズ可能な同じ時間設定を維持します。@hourly ですべての問題を解決できるわけではありません。

これにアプローチする最良の方法は何ですか?


cron ジョブを本番環境にデプロイするにはどうすればよいですか? しかし、そこに焦点が当てられているのは、cron をファブリック スクリプトにハッキングすることであり、(少なくとも回答では) ユーザーごとに cron ジョブを必要とするプロジェクトが複数存在する可能性があることは考慮されていません。

crontab の他のジョブと一緒に動作する VCS に格納されているもの (fabfile を git にプッシュしません。すべてのプロジェクト間で共有されます) を求めています。デプロイするたびに ProjectA と ProjectB がお互いのジョブを上書きしていてはダメです。

4

2 に答える 2

5

私はcrontabまたはユーザーごとのcronジョブを編集するのが好きではありません。を編集している人は誰でもcrontab、デプロイメントを台無しにする可能性があります。代わりに、Puppetcronタイプを参照)または単純なコマンド/etc/cron.$intervalを使用してスクリプトを展開できるスクリプトを作成します。cp

したがって、1日に1回実行するスクリプトが必要な場合は、$project/cron/cron.daily/$projectPuppetを使用せずにインストールする場合にスクリプトを挿入します。

または、実際にcrontabをマージする必要がある場合は、各スクリプトにヘッダーとフッターを追加して、crontabの一部がどこから来ているかを簡単に確認できるようにする必要があります。ヘッダー/フッターを使用すると、各スクリプトを自動的に追加/削除することもできます。

いつか誰かが手動で編集するので、crontab全体を置き換えないでください。編集は、再度デプロイするまで機能します。再度デプロイすると、突然サイレントに失敗します。

于 2012-09-20T12:38:01.273 に答える
4

これが私のこれまでの最良のアイデアです:

  • 私のすべてのプロジェクトは/web/project_name/
  • cronjobを必要とするプロジェクトは、それらを固定します/web/project_name/cron
  • デプロイ時に、fabはサーバー上で以下を実行します。

    find /web/ -maxdepth 2 -name cron | xargs cat | crontab
    

これにより、見つかったcronファイルがすべて削除さ/web/れ、ユーザーのcrontabに詰め込まれます。さらに良いことに、実行したいプロジェクトに依存しないジョブがある場合は、それらを貼り付けることができ/web/cron、結果のcrontabの一番上に表示されます。

于 2012-09-20T10:53:17.530 に答える