GNU/Linux >> Linux の 問題 >  >> Linux

cronラッパースクリプトの使用

このチュートリアルは、2つのことを行うことを目的としています。Cronのトラブルシューティングの記事を拡張すること。また、ファイルの作成をフラグとして使用して、何かが実行されていることを示す簡単なスクリプトの概念の概要を説明します。これは主に、何かを継続的に実行する必要があるが、一度に複数のコピーを実行する必要がない場合に役立ちます。フラグとしてファイルを作成して、ジョブがすでに実行されているかどうかを確認し、次に、さらにアクションを実行する前にそのフラグを確認できます。

これを直接適用するのは、1分ごとまたは数分ごとに実行されるcronジョブがある場合です。 cronが急速に繰り返されると、前のジョブにスケジュールされた時間よりも長くかかると、これらのタスクが積み重なってサーバーに負荷がかかったり、他の問題が悪化したりする可能性があります。これを回避するために、(目的のcronタスクの代わりに)crontabに簡単なスクリプトを設定できます。 cronを実行すると、競合するプロセスがまだ実行されていない場合にのみ、実際のタスクが実行されます。

CronWrapperを使用する理由

cronラッパーは、連続して実行する必要があるが、それ自体を踏む必要がないcronジョブがある場合に使用されます。これは、継続的に実行するように設定するタスクに適しています。 1分ごとから5分ごとのどこかで実行する必要があるジョブは、このようなラッパーを使用する必要があります。

頻繁に実行されるcronジョブでラッパーを使用しない場合、同じことを実行しようとして複数のジョブを同時に実行する可能性があります。これらの競合するタスクは、作業全体の速度を低下させます。これらの「cronジョブのスタック」は、サーバーに過負荷をかけ、サーバーが正常に応答しなくなるほど手に負えなくなる可能性があります。

Cron Wrapperとは何ですか?

これがcronラッパーと呼ばれる理由は、cronジョブをラップアラウンドし、cronの別のインスタンスがすでに実行されているかどうかをチェックするスクリプトであるためです。別のコピーが実行されている場合、ラッパーはcronにこの実行をスキップさせ、次の実行まで待機して再度チェックします。 cronラッパーが重複しないようにする方法はいくつかあります。

プロセスチェック方法

1つの方法は、ユーザーの実行中のすべてのプロセスをチェックし、実行するプロセスと同じ名前または属性を持つ別のプロセスがまだ存在しないことを再確認することです。これがMagentoのcron.shファイルの仕組みであり、ユーザーとして実行されているcron.phpの別のインスタンスをチェックし、実行されているインスタンスがある場合は終了します。これを確実に行うには複雑になる可能性があるため、最初から始めることをお勧めするものではありません。

ロックファイル方式

簡単な方法は、いわゆるロックファイルを使用することです。 cronラッパーは、実行の開始時にロックファイル(特定の名前/場所のファイル)が存在するかどうかを確認します。ロックファイルがない場合、スクリプトはそのファイルを作成して続行します。ロックファイルの作成は、cronジョブの開始を通知します。 cronジョブがラッパースクリプトを完了すると、ロックファイルが削除されます。

ロックファイルが存在する限り、別のラッパーが実行されている間、新しいラッパーは残りのcronジョブを実行しません。最初の実行が完了してロックが解除されると、別のラッパーが新しいロックファイルを再度作成し、通常どおりに処理できるようになります。

ラッパースクリプトの例

まず、簡単なbashスクリプトを作成します。ファイル内に、プログラム / bin / bashによって解釈されるスクリプトを記述します。

#!/bin/bash

次に、フラグとして使用するロックファイルの名前と場所を定義します。

# Set lockfile name and location
lockfile="~/tmp/cronwrapper.lock"

次に、スクリプトはそのロックファイルが存在するかどうかを確認する必要があります。存在する場合は、スクリプトの別のコピーがすでに実行されているため、スクリプトを終了する必要があります。

# Check if the lockfile exists
if [[ -f $lockfile ]]; then
# If the lockfile exists quit
exit;

それ以外の場合、ロックファイルが存在しない場合は、スクリプトの残りの部分を続行していることを示すために、新しいロックファイルを作成する必要があります。ロックファイルを作成すると、ロックファイルが削除されるまで保留するために実行される可能性のある将来のコピーも通知されます。また、Webを介したURLの呼び出し、コマンドラインでのPHPファイルの実行など、実行する実際のジョブを含める必要があります。

# If the lockfile is missing continue
else
# Create the lockfile
touch $lockfile
# Insert cron task here/code>

目的のジョブが実行されて完了したら、ロックファイルをクリーンアップして、cronジョブの次の実行で、最後の実行が完了し、すべてを再開できるようにします。

# Cleanup the lockfile
rm -f $lockfile
fi

上記の例では、後で簡単に参照できるように、ロックファイルを変数($ lockfile)として定義すると便利です。また、場所を変更する場合は、スクリプト内の1か所だけ変更する必要があります。

この例では、ロックファイルへのパスに「〜」をショートカットとして使用しています。これにより、シェルはユーザーのホームディレクトリを引き継ぐようになります。そのため、フルパスは次のようになります:/home/username/tmp/cron.lock。

ただし、「〜」を使用すると、同じサーバー上の多くのユーザーに同じスクリプトのコピーを使用でき、各ユーザーのフルパスを変更する必要はありません。ラッパースクリプトが実行されると、シェルは各ユーザーのホームディレクトリを自動的に使用します。

すべてをまとめる(cronwrapper.sh)

以下をコピーして、サーバー上の選択したテキストエディタに貼り付けることができます。好きな名前を付けることができますが、ここにすべてのパーツがまとめられています。

#!/bin/bash
lockfile="~/tmp/cronwrapper.lock"
if [[ -f $lockfile ]]; then
exit;
else
touch $lockfile
# Insert cron task here
rm -f $lockfile
fi

これは非常に単純な例であり、さらに拡張することができます。理想的には、1時間より古いロックファイルを無視し、とにかくcronジョブの新しいインスタンスを実行するためのチェックを追加することができます。これは、それ自体の後でクリーンアップに失敗した中断されたジョブを説明します。別の拡張機能は、前のジョブが正常に完了したことを確認することです。または、さらに別の提案として、実行中のcronジョブからのエラーをチェックし、それらのエラーに基づいて決定を下したり、アラートを送信したりします。 cronラッパーに関しては、世界はあなたのカキです!このようなタスクをスムーズに実行するには、LiquidWebのVPSサーバーをご覧ください。


Linux
  1. Linuxでの使い捨てcronジョブにatを使用する

  2. Notify-Send With Cronを使用していますか?

  3. シェルスクリプトを使用して HTML メールを送信する

  1. bash スクリプトを使用した telnet セッションの自動化

  2. CRON ジョブを使用して URL にアクセスしますか?

  3. シェル スクリプトを使用して MAC アドレスを取得する

  1. cronを使用してタスクをスケジュールするためのLinuxのヒント

  2. bashスクリプトでlftpを使用してファイルを転送する

  3. Pythonスクリプトを使用してLinuxターミナルを終了するには?