Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

いつでも宝石を使ってRubyでcronジョブをスケジュールする方法

cronとは何ですか?

Cronは、LinuxおよびMacOSオペレーティングシステムで利用可能なジョブスケジューリングシステムです。

任意のプログラムの実行に使用できます いつでも。

これにはRubyコードが含まれます!

特定の定期的なタスクがある場合 毎日、毎週、さらには1時間ごとに自動的に実行したい場合は、Cronが探している可能性があります。

タスクの例は次のとおりです

  • データベースのバックアップを毎週実行する
  • ウェブサイトの活動に関する日次レポートの生成
  • リマインダーメールの送信

cronを機能させる方法を見つけましょう!

cronの基本

すべてのユーザーは、実行するタスクを定義するcronファイルを持つことができます。

このファイルはcrontab-eで編集できます コマンド。

または、 crontab -lを使用してスケジュールされたタスクを一覧表示します 。

cronジョブの例

0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup

構文は少し注意が必要な場合があり、これらのファイルを常に手動で編集したくない場合があります。

物事を簡単にするための宝石はありますか?

はい!

いつでも宝石を使用する方法

cron構文は覚えにくい場合があるため、いつでものようなgemを使用できます。 。

このgemは、Rubyでcronジョブを定義するのに役立ちます 。

最初にgemをインストールします。

次に、構成ファイルを作成します

wheneverize .
# [add] config/schedule.rb

開いてください。

コメントアウトされた例がいくつか表示されます。必要に応じて削除してください。

1時間ごとに実行されるバックアップジョブが必要だとします。

これを「config/schedule.rb」ファイル内に書き込みます

every 1.hour do
  rake "db:backup"
end

オプションにはが含まれます :

  • rake(現在のプロジェクトで定義されているrakeタスクを開始します。 db:backupに注意してください。 デフォルトでは定義されていませんが、 db:versionを試すことができます )
  • runner( Archive.backup_nowのようなRubyクラス+メソッド )
  • コマンド(システムコマンド)

when --update-crontabを実行します cronエントリを生成するコマンド。

crontab -lを使用して新しいエントリを表示できるはずです。 。

これは私が得たものです

0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent'

タスクはproductionで実行されることに注意してください モード。

それを変更したいですか?

この設定を使用できます

set :environment, "development"

これはschedule.rbに含まれます 上部にあるファイル。

このコマンドを使用することもできます

whenever --update-crontab --set environment=development

これにより、このコマンドを実行するときに、環境として「開発」を使用してすべてのタスクが作成されます。

より多くの例

この例は、より具体的にする方法を示しています。

毎週のタスク

every :monday, at: "6:00 PM" do
  runner "Mail.send_weekly_newsletter"
end

この例は、同じタスクを1日に複数回実行する方法を示しています。

タスクを1日2回実行する

every :day, at: ["12:00 AM", "12:00 PM"] do
  command "rm tmp/testing.txt"
end

宝石のロギングとトラブルシューティングのときはいつでも

crontabファイルにタスクが含まれるようになったら( crontab -lで確認してください )準備ができています。

次へ:

スケジュールされたタスクが正しく機能しているかどうかをどのように確認しますか?

ロギングを設定して出力を読み取ることができます。

schedule.rb の先頭にこれを追加して、ログを有効にします ファイル。

構成

set :output, "log/cron.log"

--update-crontabの場合は常にを実行することを忘れないでください 変更を加えるたびにコマンドを実行してください!

ログファイルはまだ空ですか?

何かが起こるのを見るには、予定された時間を待つ必要があります。

ところで、ログにこのエラーが表示された場合

/bin/bash: bundle: command not found

つまり、cronは現在と同じバージョンのRubyを実行していません。

Rubyバージョンマネージャーを使用している場合

必ず.bash_profileからロードしてください .bashrcの代わりにファイル 、cronタスクで使用できるようにします。

いつでも代替

手入れの行き届いた宝石であり、それがうまく機能するときはいつでも。

しかし、代替案は何ですか?

ここにリストがあります

  • Heroku Schedulerは、Herokuユーザー向けの無料のジョブスケジューリングアドオンです。 cron自体ほど柔軟ではありませんが、処理は完了します
  • Rufusスケジューラー。cronをメモリ内スケジューラーに置き換えるRubygem
  • SidecloqとSidekiq-cronは、どちらもSidekiqに定期的なタスクを追加するSidekiqアドオンです

どちらのSidekiqアドオンも、スケジューリングに実際のcron構文が必要なため、構文が常に優れているとは言えないことに注意してください。

良い点は、SidekiqWebUIと統合できることです。

概要

Rubyでeverynessgemを使用してcronジョブをスケジュールする方法を学びました!

より多くの人々がそれから利益を得ることができるように、この記事を共有してください。

読んでくれてありがとう。


  1. Ruby Mapメソッドの使用方法(例付き)

    Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.

  2. Rubyでパーサーを構築する方法

    構文解析は、一連の文字列を理解し、それらを理解できるものに変換する技術です。正規表現を使用することもできますが、必ずしもその仕事に適しているとは限りません。 たとえば、HTMLを正規表現で解析することはおそらく良い考えではないことは一般的な知識です。 Rubyには、この作業を実行できるnokogiriがありますが、独自のパーサーを作成することで多くのことを学ぶことができます。始めましょう! Rubyでの解析 パーサーの中核はStringScannerです クラス。 このクラスは、文字列のコピーと位置ポインタを保持します。ポインタを使用すると、特定のトークンを検索するために文字列をトラバ