Cronsで書くのは簡単ですが、混乱するような形で実行されます。
通常、シェル(shell)はあなたのシェル(shell)ではなく、パス(path)はあなたのパス(path)ではなく、環境は自分の環境ではありません。 Cronはあなたのタスクを実行し、失敗し、何も記録されません。 代わりにメールを送信しようとし、メールを指定しなかったために失敗します。 あなたが持っていれば、それはあなたがメーラーを設定しなかったので、また失敗するでしょう。
それは、バックグラウンドでコマンドを実行するだけで心配するように思えます。
OhMyCronは、ロギングと環境負荷に直感的かつ従来のアプローチを追加することにより、cronを再び便利にします。
・STDOUTはSyslogのuser.infoに記録され、STDERRはuser.noticeに記録されます。
・CronはBSDロックでロックされています(ロック名を設定することができます)。それらが予想よりも長く実行された場合、それらが積み重なるのを防ぐためです。
・/ usr / local / binがPATHに追加されます。
・ohmycronはBashでタスクを実行し、タスクを実行する前にユーザーのプロファイルをロードします。
今日、私たちはOhMyCronのオープンソース化に満足しています。
OhMyCron at Instacart
Instacart社では、OhmyCronを使用して、cronタスクの75%をうまく包み込み、cronシェルとし使用されています。
SHELL=/usr/local/bin/ohmycron * * * * * root sleep 70
OhMyCronは、プラットフォーム、データおよび資産処理チームのニーズから生じました。 これらのチームはすべてCronを使用する必要がありました。 それらのすべては、アプリケーション環境の仕様と互換性のある方法でCronを使用する必要がありました。
特に、ロック(locking)は予期せぬ負荷の変化を反映しています。 以前に30秒で実行されタスクは、1〜2ヶ月後に1〜2分かかることがあります。 これらのジョブは積み重なり、互いにブロックする可能性があります。 OhMyCronは、各ジョブをロックすることで、上記のような約70秒かかるタスクは同時に実行されないようにします。
実績のあるロックシステム
OhMyCronは、カーネルによって管理されているBSD locks(群)でジョブを自動的にロックするので、失効したロックファイルがジョブの実行を妨げることはありません。 BSDロックはopen file descriptorに結びついているため、再起動しても保持されません。
OhMyCronは、渡されたコマンドラインに基づいてロックの正しい名前に到達しようとします。 同じコマンドを使用するいくつかのタスクがあります。
SHELL=/usr/local/bin/ohmycron * * * * * coderunner rake slow * * * * * coderunner rake fast
このような場合には、シェルのno-op文(statement)を使用します。 – ロックトークン(locking token)をどのようにするべきかOhMyCronに伝える:
SHELL=/usr/local/bin/ohmycron * * * * * coderunner : rake:slow ; rake slow * * * * * coderunner : rake:fast ; rake fast
OhmyCronはデフォルトでSyslog “プログラム名”としてコマンド名を使用して、STDOUTとSTDERRの両方をsyslogに記録します。 したがって、この例:
SHELL=/usr/local/bin/ohmycron * * * * * root sleep 70
次のような行を持つOlogs:
... sleep[1811]: ...
ロックトークン(lock token)を設定すると、OhMyCronはその値を “プログラム名”として扱います。 したがって、この例の場合:
SHELL=/usr/local/bin/ohmycron * * * * * coderunner : rake:slow ; rake slow * * * * * coderunner : rake:fast ; rake fast
次のような行が表示されます。
... rake:slow[1777]: ... ... rake:fast[2023]: ...
小さなステップ
ジョブのロック、ロギング、環境管理は大きなスペースです. OhMyCronが有用な役割を果たしていきたいと考えています。 普通はCronと一緒に使用されていますが、必ずしもそうである必要はありません。 ClockworkのChronosやシェルアウトのコマンドを簡単にラップすることができます。
タイトル:OhMyCron — Locking, Logging and Environment setup for cron
作者:zain
原文URL:https://tech.instacart.com/ohmycron-locking-logging-and-environment-setup-for-cron-cf5026d360cc