毎月の最終日23時55分にcronでbatchを動かす
55 23 28-31 * * /usr/bin/test $( date -d '+1 day' +\%d ) -eq 1 && perl /getsumatsu_batch.pl > /dev/null 2>&1
仕組み
# 時間指定(28日から31日の23時55分) ⇒ なので実際には月末以外にも動いてはいます
55 23 28-31 * *
/usr/bin/test コマンド
/usr/bin/test {hoge}
hogeが真なら1を偽なら0を返します。
条件式 (現在の日に1日足した日(翌日)が1日なら1を返す、そうでないなら0になる)
/usr/bin/test $( date -d '+1 day' +\%d ) -eq 1
条件式の中身
$( date -d '+1 day' +\%d ) -eq 1
現在の日に1日足した日(翌日)が1日であるかどうかを見ています。
&&
A && B
↑の場合だと 「Aが真ならBを読み込む」といった感じ(うまく説明出来ない)
実行するコマンド、プログラム
perl /getsumatsu_batch.pl
> /dev/null 2>&1
コマンドの実行結果をコンソールに出力させない場合の指定(と認識してます)
> /dev/null
/dev/nullに対して出力したものはすべて破棄されます。
なので
% ls >/dev/null
↑は何にも出力されません。
2>&1
これは プログラムがアクセスするファイルや標準入出力などをOSが識別するために用いる識別子(ァイル・ディスクリプタ) らしいです。---- IT用語辞典
ファイルディスクリプタ | 意味 |
---|---|
0 | 標準入力と呼ばれ、シェルへの入力元を表す。通常はキーボード空の入力になっている |
1 | 標準出力と呼ばれ、シェルの結果の出力先を表す。通常は画面への出力となっている |
2 | 標準エラー出力と呼ばれ、シェルで実行時に発生したエラーメッセージの出力先を表す。通常は画面への出力となっている |
この上で 2>&1 が意味しているのは、コンソールに標準エラーの出力先を標準出力の出力先と同じにしている
-- 参考