質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.38%

  • cron

    224questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

cronで第1営業日を指定する方法はないでしょうか?

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 1,857

akihiro0117

score 25

第1日曜日の指定方法などは、検索するとたくさん見つかるので、

0 8 1-7 * *  (([ $(date "+%w") -eq 1 ] || [ $(date "+%w") -eq 2 ]) && date)

というような感じで、平日の曜日をつなげればいいのかと思いましたが、それだと、月曜日も火曜日も両方とも実行されてしまいます。

何かご存じの方がいらっしゃったら、情報いただけると助かります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

以下でどうでしょうか?

0 8 1 * 1-5 (command)
0 8 2 * 1   (command)
0 8 3 * 1   (command)

 訂正

otn さん のご指摘どおり、day of month(3つ目)と week of month (5つ目)は AND ではなく OR でした。
KSwordOfHaste さん のコメントを以下にまとめます。

0 8 1 * *  [ $( date "+\%w" ) -ge 1 -a $( date "+\%w" ) -le 5 ] && コマンド
0 8 2-3 * *  [ $( date "+\%w" ) -eq 1 ] && コマンド

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/27 00:46

    ほんとだ!
    失礼しました。

    キャンセル

  • 2018/03/27 00:56 編集

    0 8 1 * * [ $(date "+%w") -ge 1 -a $(date "+%w") -le 5 ] && command
    0 8 2-3 * * [ $(date "+%w") -eq 1 ] && command
    こんな感じになってしまうんでしょうか・・・
    実際には実行対象でない日にもcronのログがmailboxにはいってしまうんでしょうか・・・

    キャンセル

  • 2018/03/27 11:51

    ありがとうござます!
    今回は祝日は無視するので、大丈夫です。
    cronログについても目をつぶります。

    キャンセル

+2

国民の祝日や年末年始など無関係で、月~金(土?)は常に営業日という企業でしょうか?

こんな感じで行けると思います。FLAGファイルの場所はどこか書き込み権限があり消えない場所。ファイルは最初に作っておく必要があります。

FLAG=/path/to/somewhere
0 8 1-7 * * [ $(date -r $FLAG +\%m) != $(date +\%m) -a $(date +\%w) != 0 -a $(date +\%w) != 6 ] && (touch $FLAG ; date)


「前回実行が今月でない and 日曜日でない and 土曜日でない」ときに実行。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/27 01:30

    ああ、4日以降になることはないのか。あまり深く考えずに書いてしまいました。
    KSwordOfHaste さん のコメントで十分ですね。

    キャンセル

  • 2018/03/27 11:42 編集

    祝日まで考慮すると、手間なので今回は無視します。
    有り難うございます。

    キャンセル

+1

ちょっとパターンをつくってみた(間違えてるかもしれないが) 
※ cron の設定ではなく計算用としてください。

分   時   日   月                        曜日  備考   参考 
0    8    1    2,3,4,5,6,7,8,9,10,11,12  1-5   1日が平日   - 
0    8    2    2,3,4,5,6,7,8,9,10,11,12  1     2日が月曜   日月 
0    8    3    2,3,4,5,6,7,8,9,10,12     1     3日が月曜   土日月 
0    8    4    1                         1-5   4日が平日(年末年始)  祝休休平 
0    8    4    11                        2     4日が火曜   土祝振火 
0    8    5    1                         1     5日が月曜   祝休休日平 
0    8    6    1                         1     6日が月曜   祝休休土日平 
0    8    6    5                         4     6日が木曜   土日祝祭祝木 

休:その他休業日

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • cron

    224questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。