毎日異なるパラメーターでcronjobを実行する


12

私はプログラマーであり、cronについてはあまり知りませんが、これが可能かどうか知りたいです。

[option1, option2, option3]NodeJSで実行する配列とスクリプトがあるとしましょうscript.js。このスクリプトを毎日午前1時に実行したいと思います。このcronコマンドは次のとおりです。

0 1 * * * node ~/script.js

トリッキーな部分です。オプションを毎日ローテーションしたいので、たとえば、月曜日に実行したいnode ~/script.js option1、次の日node ~/script.js option2など。また、必要なときにオプションを追加/削除できるようにしたいのですが、回転はそのままにしておく必要があります。

これは何らかの形で可能ですか?ノード内でもこれを行うことができますが、スクリプトの外部からこれを行い、スクリプトをそのままにしておきます。


2
私は、これをスクリプト化することと、cronにそれ自体を実行させることをお勧めします。
earthmeLon

回答:


15

また、必要なときにオプションを追加/削除できるようにしたいのですが、回転はそのままにしておく必要があります。

それは難しいです。オプションのリストを変更した後、ローテーションが元のままになるとはどういう意味ですか 結局のところ、リストを完全に再構築して、自分がどこにいたのかについての手がかりを破壊することができました。

おそらくできることは、(ファイル名またはコンテンツを介して)オプションを表すファイルでディレクトリを設定することです。その後、cronジョブが実行されるたびに、そのディレクトリを一覧表示し、最終変更時刻でファイルを並べ替えます。最も古いエントリであるtouchそのファイルを取得して、変更時刻を現在の時刻に変更し、それを使用してスクリプトを実行します。

#!/bin/bash
cd ~/script-options
next=$(ls -rt | head -n1)
touch -- "${next}"
node ~/script.js ${next} or $(<"${next}")

必要に応じて、これをcronについても1行で記述できますが、読みにくくなります。

オプションを追加すると、新しいファイルがオプションディレクトリに追加されます。オプションを削除すると、ファイルが削除されます。どの時点でも、最も古いファイルが次に実行されるファイルであるため、新しいオプションがサイクルの最後に追加され、まるで実行されたかのようになります。オプションの順序を変更する場合は、任意の順序でオプションをタッチできます。


「リスト編集」全体でオプションの連続性を管理する方法については、絶対に+1してください。
ハーゲンフォンアイゼン

答えてくれてありがとう、私はそれが好きで、それを使います。リストに新しいものを追加するとき、回転の正確な順序はそれほど重要ではありません。唯一重要なことは、全員が毎週同じ日に2回ではなく、毎週1〜2回実行されることです。
サイフBechan

2
$(ls -rt | head -n1)もちろん、改行を含むファイル名で中断しますが、この目的のために、おそらく「それをしないでください」で逃げることができます。
cjm

20

曜日ごとに異なるオプションが必要だとしましょう。あなたはできる:

  1. これらの個別のcronジョブがあります。

    0 1 * * 0 node ~/script.js option1
    0 1 * * 1 node ~/script.js option2
    0 1 * * 2 node ~/script.js option3
    

    等...

  2. bash必要なオプションを提供してください:

    0 1 * * * node ~/script.js case `date +%u` in 0 ) echo option1 ;; 1 ) echo option2 ;; 2 ) echo option3 ;;  esac
    

    (私は後者を実行しなかったので、微調整が必​​要になるかもしれません-しかしそれは一般的な考えです。)


2
答えてくれてありがとう、でも面倒になると思う。私は本当にどこかで配列を定義する必要があります。そうしないと機能しません。echo option1私の選択肢は週ごとに異なる可能性があるため、etcなどで作業することはできません。Nodeアプリでこれを行い、dbで最後に実行したものを追跡します。
サイフBechan

13

いいえ、これを行うクリーンな方法は考えられません。日付をチェックし、毎日必要なオプションを使用してノードアプリケーションを起動する単純なシェルラッパースクリプトを記述するだけです。


+1キーは「クリーンな方法なし」です。
パオロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.