HOKKAPOKKA
@HOKKAPOKKA (HOKKA POKKA)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Linuxで使うcronの正しい記述方法を知りたい。

Q&A

解決したいこと

Linuxで使うcronの正しい記述方法を知りたい。
具体的には、毎月、第一月曜日の翌日の17:00に作動するcronの記述が知りたい。
詳細:
これを毎月第一火曜日と記述すると、以下になり一見良い様に思えた。
0 0 17 ? * 3#1 *
ただ、カレンダーをよく見ると、今年の10/1は火曜日なので、このままだと
10月は10/1 17:00に動いてしまう。
実際に起動したいのは"第一月曜日の翌日の17:00"なので、10月については
10/8 17:00 です。

上記を 0 0 17 ? * 2#1 * といったん定義して、"その翌日"のような記述はできないのか知りたいところです。
この書き方にこだわらず、何か良い記述方法があるとうれしいです。

自分で試したこと

外部ツールでは対応できないようでした
https://rakko.tools/tools/88/

0

2Answer

cronは様々な記法に対応しているため、私ならこうするで回答させてもらいます。

「第一月曜日の翌日」は「毎月2-8日のいづれかの火曜日」と言い換えることができます。
なので、cronを毎週火曜日の17:00に起動、日付が2-8日以内かどうかをdateコマンド等で確認し、trueであれば実行したいコマンドを実行する、という感じにします。

3Like

Comments

  1. @HOKKAPOKKA

    Questioner

    以下が通れば解決だったんですが、曜日と日付のand条件としてはくれないみたいですね。エラーになります。

      • 17 2,3,4,5,6,7,8 * TUE *
  2. その通りエラーになります。
    cronの記法は便利ですが、すべてのパターンを実現できるわけではありません。
    なので火曜日または日付のどちらかをcronで指定、もう片方をdateコマンド等で確認するといったcronのみに頼らない対応が必要になります。

    cronの起動回数は少ないほうがいいので、月に4-5回しかない曜日のほうをcronで指定、日付をdateコマンドで確認する方法を提案しています。

cronでなくsystemdを使うのはどうでしょうか。systemdのタイマーはcronより面倒かもしれませんが、いろいろ細かく指定できます。
下記のURL先にある例に「毎月の1日から4日まで、月曜日か火曜日の場合にのみ、午後0時にサービスを実行します」ような例があるので参考になるのではないでしょうか

image.png

0Like

Comments

  1. @HOKKAPOKKA

    Questioner

    ありがとうございます。実は実際に使うのはLinuxシステムではなく、RPAの管理画面に入れるので、systemdもdateコマンドも使えないのです.たまたまcronに文法が準拠しているだけなのです。

Your answer might help someone💌