system management
1753734 メンバー
4467 オンライン
108799 解決策
新規ポスト

cronで月末にスケジューリングするには?

 
K_K
時折のアドバイザー

cronで月末にスケジューリングするには?

いつも有益な情報、参考にさせていただいております。

軽率な質問で恐縮ですが、スクリプトを毎月末に走らせようと考えてます。cronで日付指定する場合30日や31日と月ごとに月末の日付がバラバラのため指定方法がわかりません。月末を指定するにはどのようにすればよろしいでしょうか?
7件の返信7
watermelonyu
高貴なコントリビューター

cronで月末にスケジューリングするには?

man pageみましたが「月末」という指定はできないようですね。

28,30,31日に実行しといてスクリプトで制御が手っ取り早いと思います。↓サンプルです。

#!/bin/sh

DATE1=$(date +%m%d)

if || || ||

|| || ||

|| || ||

|| || ;then

echo "動きます"

fi

K_K
時折のアドバイザー

cronで月末にスケジューリングするには?

suqa2さん、ありがとうございます。

大変助かりました。

そのサンプルを参考にスクリプト書き直してみます。
nt
貴重なコントリビューター

cronで月末にスケジューリングするには?

うるう年の処理が必要ですよ。
hazelwood
信頼あるコントリビューター

cronで月末にスケジューリングするには?

もう解決しているようですが、スクリプトで月末を判断するまでも無く、単純に3行で指定すればいいのではないですか?

月末23:00に起動するとして、crontabに以下のように登録すればいいと思いますが。

vvvvvvvvvvvvvvvvvvv

00 23 30 4,6,9,11 * command

00 23 31 1,3,5,7,8,10,12 * command

00 23 28,29 2 * command

^^^^^^^^^^^^^^^^^^

2月だけ、プログラム内でうるう年かどうか判断すればよろしいかと思います。

K_K
時折のアドバイザー

cronで月末にスケジューリングするには?

ntさん、hazelwoodさんありがとうございます。

確かに3行で登録すればできましたね。

愚かでした:)
watermelonyu
高貴なコントリビューター

cronで月末にスケジューリングするには?

すみません、うるう年忘れてましたね

もう終わった話題みたいですが、一応貼っておきます。

28,29,30,31 日に実行するパターンです。

#!/bin/sh

YEAR=$(date +%Y)

DATE1=$(date +%m%d)

if || || ||

|| || ||

|| || ||

|| || ;then

echo "実行処理"

elif ;then

J4_1=$(expr $YEAR % 4)

J4_2=$(expr $YEAR % 100)

J4_3=$(expr $YEAR % 400)

if ;then

if ;then

if ;then

exit

fi

echo "実行処理"

fi

else

echo "実行処理"

fi

fi

ryuji.ishisako
新しいメンバー

cronで月末にスケジューリングするには?

これ、私もLinuxで悩んだことがあります

こう実装すればシンプルで可読性も良いのでどうでしょう、

と思い投稿しました

--crontab--------------------------------------

50 23 28-31 * * b_user /custom/libexec/script_ctl.sh

-----------------------------------------------

--/custom/libexec/script_ctl.sh------------------

#!/bin/sh

chk_day=`/bin/date -d '+1 day' +%d`

if ; then

/custom/bin/script_exe.sh

fi

------------------------------------------------

crontab で直接月末判定(test)させ、そのまま目的のスクリプトを実行させてもよいかと

28-31 指定はしょうがないです

個人PCのLinuxで動作確認しただけなので、必要に応じてHP-UXに最適化してください

※HP-UXのcrontabにも月末判定が基本実装されていないのですね