LoginSignup
40
36

More than 5 years have passed since last update.

月末にだけcronでbatchを叩きたい場合 && /dev/null や 2>&1 について

Posted at

毎月の最終日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 が意味しているのは、コンソールに標準エラーの出力先を標準出力の出力先と同じにしている

-- 参考

40
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
36