間隔cronはいつ最初に実行されますか? (例:* / 3日)

間隔cronはいつ最初に実行されますか? (例:* / 3日)

長すぎます。:cronは実行時間を決定するために間隔値を使用して現在の日付の値と比較しますか、それとも文字通り「3日ごとに」作成後に指定された時間に実行されますか?

質問:

次のタスクを追加すると、明日の真夜中にcrontab -e初めて実行されますか、それとも明日から3日間実行されますか?それとも、毎月「3番目」の日にのみ適用されますか? 1日目、4日目、7日目、10日目…?

0 0 */3 * * /home/user/script.sh

昨日このクローンを入れて今朝実行しましたが(これが私の質問に対する答えかもしれません)、これが正しいことを確認したいと思います。今日は31日ですが、間隔値がシーケンスに属しているようです。 cronが今月1日にインターバル実行を開始すると、明日再び実行されますか?

その他の注意:

持つcronに関する素晴らしい投稿とリソースはすでにあります。一般的に言えば(これは私が知っている一般的なトピックです)、特定の間隔の始点が私にとってはあまり明確ではありません。さまざまなソースからさまざまな方法で説明します。

  • これunixgeeks.org投稿には次のように記載されています。

    Cronは「ステップ」値もサポートします。 domフィールドの* / 2の値はコマンドが2日ごとに実行されることを意味し、同様に時間フィールドの* / 5の値はコマンドが5時間ごとに実行されることを意味します。

    • それでは何が隠されていますか?本物二日に一度?
  • この回答宣言されたcronjobは、0 0 */2 * *「奇数日00:00に実行されます(ステップ2のデフォルト範囲は1,3,5,7,...,31)。」

    • クローンはいつも毎月1日に始まりますか?
    • ブログには、クローンが31日に実行され、来月1日に再実行されると示されているようです(したがって2日連続)。間隔はその日付の値に基づいているためです。
  • 他の例このブログ投稿から

    • 0 1 1 */2 * command to be executed2ヶ月に1回1日午前1時に実行する必要があります。
    • これは、cronが1、3、5、7、9、11ヶ月で実行されるという意味ですか?

*/3cronは、間隔値を日(または秒、分、時間、または月)の値と比較して間隔cronjob()を実行するように設計されているようです。これは100%正しいですか?

ポリスチレンこれは(私の考えでは)少し説明が必要なcronの特定の機能に関する非常に具体的な質問です。これにより、Googleは「3ヶ月ごとに」クローンがCrontabに追加された後に初めて実行されることを100%確実に伝えることができます。

ベストアンサー1

これcrontab(5) のマニュアルページ非常に明確な表現を使用してください。

ステップ値は範囲とともに使用できます。 「/number」の後の範囲は、その範囲内の数値をスキップすることを指定します。たとえば、時間フィールドに「0-23/2」を使用して、コマンドを毎時間実行するように指定できます(V7標準の代替は、「0,2,4,6,8,10,12, 14,16, 18,20,22")。アスタリスクの後にもステップが許可されているので、「2時間ごと」と言いたい場合は「*/2」を使用してください。

正確な表現(および例)は、「範囲の数値のスキップ」です。これは、範囲の最初の数字で始まるという意味です。

つまり、範囲が 1 の場合、1-31or の場合、返される値は 1,3,5,7..etc です。これはまた、実行が完了した後に範囲が開始値にリセットされることを意味する。1-31/2*/2

したがって、あなたのコメントも正しいです。この場合、cronjobは来月31日と1日に実行されます。

cronには、「月中の日」と「曜日」という相互に排他的な2つのフィールドがあります。したがって、日数差のあるジョブを実行する場合は、これらのいずれかを選択する必要があります。

隔日で完全に実行されるcronjobを定義するには、複数の行を使用し、現在のカレンダーに基づいて毎月カスタマイズする必要があります。

おすすめ記事