毎月最後の土曜日に演劇スケジュールをつかみたいです。私は次のことを思い出しました。
45 23 22-28 * * test $(date +\%u) -eq 6 && echo "4th Saturday" && sh /folder/script.sh
これは正しいのですか、それともそれを変えなければなりませんか?最後の土曜日にのみ呼び出されるので、今はテストできません。アドバイスしてください。
毎月最後の日曜日については、次の内容がありますが、内容をよく理解していません。最初の部分は日曜日の24を提供し、その後-eqは7を提供します。これが何を意味するのかわかりません。
00 17 * * 0 [ $(cal -s | tail -2 | awk '{print $1}') -eq $(date | awk '{print $3}') ] && /folder/script.sh
前の土曜日に受け取るように上記の内容を編集できますか?
Romeoの助けを借りて、次の答えを得ました。
00 17 * * 6 [ $(cal -s | tail -2 | awk '{print $7}') -eq $(date | awk '{print $3}') ] && /folder/script.sh
答え1
あなたのロジックは動作しません。毎月の最後の土曜日は29日、30日、または31日です。したがって、確認を実行する最良の方法は、毎週土曜日に実行し、その月の最後の7日であるかどうかを確認することです。
45 23 * * 6 sh /folder/script.sh
date
次に、スクリプトに次のコンテンツを追加します(ここではGNU実装を想定しています)。
if [ "$(date -d "+7 day" +%m)" -eq "$(date +%m)" ]
then echo "This is not one of last 7 days in month.";exit
fi
<rest of your script>
cronの行に関しては、次のように開始するように編集する必要があります。
00 17 * * 6
(6は土曜日、0または7は日曜日を意味します)
答え2
Dillon Crontab(私の思考にはより良い、より多くの機能が含まれており、アナクロンも提供しています)を使用する場合は、次のオプションがあります。
日付と曜日の両方を指定すると、その月のN番目の日として解釈されます。
45 23 5 * 6 /path/script.sh
毎月最後の月曜日などをリクエストするには、「5番目」の月曜日をリクエストしてください。その月に月曜日が4回しかない場合でも、常に最後の月曜日などと一致します。
あなたと他の人が今後のお問い合わせにこの回答を使用できることを願っています。
引用:
答え3
そして残りの答えはあなたが尋ねた方法(cronjobを通して)で構成されます。
これがシステムタイマーが存在する理由であることは注目に値する。彼らはより強力なスケジューリングを持っています。
cronjob以外のシステムサービスと一致するタイマーを作成します。
タイマーでOnCalendarを使用する
OnCalendar=Sat *-*~07/1 23:45:00
それとももっと詳しく...
OnCalendar=Sat *-1,3,5,7,8,10,12-25..31 23:45:00
OnCalendar=Sat *-4,6,9,11-24..30 23:45:00
OnCalendar=Sat *-2-22..29 23:45:00
https://www.freedesktop.org/software/systemd/man/systemd.timer.html
https://www.freedesktop.org/software/systemd/man/systemd.time.html
https://wiki.archlinux.org/title/Systemd/Timers
https://documentation.suse.com/smart/linux/html/task-create-systemd-timers/index.html#id-1.5
答え4
00 01 * * 6 [ $(date +\%d) -gt $(date \-d "-$(date +\%d) days month -7 days" +\%d) ] && /run/my/script
$(日付+%d)は現在の日付です。
$(date -d "-$(date +%d) days Month -7 days" +%d) は "今月の日数 (つまり、前月の最後の日) に 1 ヶ月を加えてから 7 日を引いたものです。 。
したがって、2023年2月14日に実行すると、次のような結果が得られます。
[ 14 -gt 21 ] && /run/my/script
だから実行されません。
6日目にチェックすると、毎週土曜日の希望の時間に実行されます。