いつでも宝石を使って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ジョブをスケジュールする方法を学びました!
より多くの人々がそれから利益を得ることができるように、この記事を共有してください。
読んでくれてありがとう。
-
Ruby Mapメソッドの使用方法(例付き)
Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.
-
Rubyでパーサーを構築する方法
構文解析は、一連の文字列を理解し、それらを理解できるものに変換する技術です。正規表現を使用することもできますが、必ずしもその仕事に適しているとは限りません。 たとえば、HTMLを正規表現で解析することはおそらく良い考えではないことは一般的な知識です。 Rubyには、この作業を実行できるnokogiriがありますが、独自のパーサーを作成することで多くのことを学ぶことができます。始めましょう! Rubyでの解析 パーサーの中核はStringScannerです クラス。 このクラスは、文字列のコピーと位置ポインタを保持します。ポインタを使用すると、特定のトークンを検索するために文字列をトラバ