毎日午後10時にbashスクリプトを実行するようにcronを設定しています。毎月1日に実行する別のcronセットアップがあります。両方のcronはbashスクリプトを起動し、bashスクリプトの唯一の違いは、基礎となるJavaプログラムに渡す引数です(Java =プログラム)。
問題は、どちらかが同じ日に実行されないように、月の1日に毎日のcronを何らかの方法で無効にする必要があることです。これは自動的に実行できますか?
別のbashスクリプトを作成して、最初の前にcronを編集し、その後に設定を元に戻すことができると思いますが、これは...不明瞭なようです。
コメントで@StephaneChazelasによって提案されたソリューションと同様に、3番目のフィールドで、月の1日以外に毎日実行するcronの範囲として日数の範囲を指定できます。
次の2つのエントリは、目的を達成します。
0 22 1 * * /path/to/script/1st_of_the_month.bash
0 22 2-31 * * /path/to/script/every_day_except_1st.bash
これに対処する最も簡単な方法は、1つのcronエントリを用意することです。 bashスクリプトを変更して日付を確認します。月の最初の場合は、Javaプログラムに月次パラメーターを指定して呼び出します。それ以外の場合は、日次パラメーターを指定してプログラムを呼び出します。
スクリプトを変更すると、ドキュメントとしてのスクリプトは、cronテーブルに追加情報を必要とせずに、何が起こっているかをより詳しく説明するので、プロセスが単純になります。
スクリプトmodは次のようになります。
if [ $(date '+%d') == "1" ];then
# monthly code
else
# daily code
fi
if [ $(date '+%d') == "1" ];then
# monthly code
else
# daily code
fi
もっと正確であれば整数比較を使用すると思います
日付 '+%d'は1ではなく01を返すため、==文字列比較を使用するとfalseになります
代わりに
if [ $(date '+%d') eq 1 ];then
# monthly code
else
# daily code
fi