brand new note

ジャズお兄さんの技術メモ

標準出力と標準エラー出力の話

実行結果をログに残そうとして、標準出力とか標準エラー出力ってなんだろうってなったのでメモ。基礎の基礎ですね…。

事の発端はntpdate

ntpdateコマンドは、ntpサーバから時刻情報を取得し表示するコマンドです。この出力結果をログに追記するよう作りかけのスクリプトを改良していたのですが、うまく書き込みされなかったというのが発端です。

そのときはスクリプト内に「2>&1」を追記したら解決したのですが、その意味をよく理解しないまま「あ、動いた」で流れてしまいました。なので「ntpdateコマンドのデフォルトは標準エラー出力なのか??」などと考えてましたが、そうではないです笑

https://teratail.com/questions/1285

ここの「2>&1って何だ」という疑問の記事を読んで解決しました。

詰まった当時は標準出力と標準エラー出力スクリプト内で一緒くたになっており、ファイルに書き込まれる分と画面に出力される分がばらばらになって、うまく行かなかったようです。

同じテキストやログファイルに色んなものを出力するには、このへんを頭に入れてリダイレクトしないとうまく記録できないので注意が必要です。

せっかくなのでntpdateの説明

ntpdateコマンドの実行結果(ubuntu)と参考サイトは以下になります。 f:id:frazz:20171107213829p:plain

コマンドが使えない方は sudo apt install ntpdate とかして入れてみましょう。

ntpサーバのIPアドレスはインターネットマルチフィード(MFEED)を使ってみます。誰でも使えるntpサーバは他にもあるので、試す方は参考サイトを見てみるといいと思います。

時刻情報を取得してテキストファイルに入れているだけですね。ここで「標準出力できてんじゃん!」と気づきました(遅い)

時刻同期にはすぐに同期するstepモード(-bオプション)と徐々に同期していくslewモード(-Bオプション)というのがあるらしく、ここではslewモードを使いました。ケースによって使い分けるんだと思います。

syslogに出力する-sオプションっていうのもありますが、ちょっと試した感じではちゃんと出力できませんでした。syslogをちゃんと理解していないからでしょうか…次の課題になりそうです。