done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。すべての記載は他に定める場合を除き個人的なものです。

Log4jのDailyRollingFileAppenderはrollOverするタイミングでプロセスが実行していなくても、次にプロセスが実行されるタイミングでrollOverする話

自分用メモ

DailyRollingFileAppenderで、日付でのローテーションを行う設定をする場合、普段ローテーションするタイミングで サーバーなりプロセスなりが落ちていた場合どうするのでしょう。

まずは確認。DRFAだと普段はMidnightにローテーションされる

 At midnight, on March 8th, 2002, /foo/bar.log will be copied to /foo/bar.log.2002-03-08. Logging for the 9th day of March will be output to /foo/bar.log until it is rolled over the next day.

DailyRollingFileAppender (Apache Log4j 1.2.17 API)

じゃあMidnightにサーバー落ちてたらどうなるのっと。

その答えは以下

log4j/DailyRollingFileAppender.java at v1_2-branch · apache/log4j · GitHub

  /**
   * This method differentiates DailyRollingFileAppender from its
   * super class.
   *
   * <p>Before actually logging, this method will check whether it is
   * time to do a rollover. If it is, it will schedule the next
   * rollover time and then rollover.
   * */
  protected void subAppend(LoggingEvent event) {
    long n = System.currentTimeMillis();
    if (n >= nextCheck) {
      now.setTime(n);
      nextCheck = rc.getNextCheckMillis(now);
      try {
    rollOver();
      }
      catch(IOException ioe) {
    LogLog.error("rollOver() failed.", ioe);
      }
    }
    super.subAppend(event);
   }
}

つまり、まずファイルにログを書き出しする前にちゃんとローテーションされているかをチェックして、されていなければrollOverしてくれるっぽい

cowsay + fortuneで遊ぶ

参考のサイトを少しいじった程度です。以下を~/.zshrcに記入します。

function random_cowsay() {
    cows=$(ls -1 /usr/share/cowsay | tr '\n' ' ')
    cows_array=${(z)cows}
    num_cows_array=${(w)#cows}
    random_cows=$(expr $RANDOM % $num_cows_array + 1)
    cow_name=$cows_array[$random_cows]
    cowsay -f $cow_name "$(fortune -s)"
    # I dont know why the line is need below ...
    echo $RANDOM > /dev/null 2>&1
}
random_cowsay

Ref:

qiita.com

LPIC Level 3 (303-150)に受かった

タイトルが全てです。今回、諸般の事情により勉強時間が3日しか取れなかったのでアカンかなと思いましたが、なんとか受かりました。得点は550点と低飛行でしたが・・・;)

使った教材は定番の黒本

そしてこちらのサイトです。

Linux Questions & Answers | Category Archive | 117-303 (v.1)

特に上のサイトが良くて、かなりボリューム感ある演習ができます。

ただ、303-150の試験は2016年8月までで終わりみたいで、303-200の試験しか受けられなくなるみたいですね。早いとこ黒本の新板が出て欲しいところです。

受けた時はまず最初のほうの問題が意味不明なのが多く、落ちることを覚悟しました。後半のほうは見たことある系の問題だったので助かりました。

Windows 10 anniversary update + VirtualboxでBSODを回避する方法

TL;DR Hyper-Vを有効にしてる方は,cmd(管理者権限付き)で以下のコマンドを打って再起動

bcdedit /set hypervisorlaunchtype off

要はHyper-VVirtualboxの相性が悪いんでしょうかね.


Bash on Ubuntu on Windowsが来てうっひょーとなりながらアップデートしてBash動かしてapt-getしてうっひょーとなっていたのもつかの間,

Vagrant upしようとしたらBSODになって再起動しやがることを繰り返し始めました.

最初は最近アップデートしたVirutalboxがいけないのかなーとか思って,昔のバージョンに戻したりしても全部ダメ.

辛い辛いと思いながらググってたら以下のページを発見

virtualbox.org • View topic - Windows 10 Anniversary Update Broke VirtualBox?

皆さん同じようなことで困っていた様子.つまりはHyper-Vを無効にしろとのこと

そういえば最近bcdedit /set hypervisorlaunchtype autoとかやってうっひょーってなってたっけなと思って冒頭のコマンド打って再起動したら治りました.

しかしここで重要なのは,筆者が使っているWindows 10はHomeエディションで,そもそもHyper-Vなぞ機能として使えないことです.

(じゃあなんでbcdedit /set hypervisorlaunchtype autoなんて打ったんだよって話ですが,打つまでProでないとHyper-V使えないと知らなかった情弱でした)

使えない機能をオンにしたらBSODになったという話でした.ProにしてHyper-V有効にしてDocker for Windows使いたい

bash -c オプションの細かい話

とある案件でbash -cめっちゃ使いてえな・・・となり,いろいろ見ていたんですが,なんか思っていた挙動と違っていたのでメモ

bash -c echo testtestが出力されると思っていました.ところが・・・

$ bash -c test echo
(何も表示されない)

どうやら"などで囲まないと行けないらしい

$ bash -c "echo test"
test

man bash-cのセクション読んでもよくわからない・・・解釈力が低すぎる・・・

msys2のexeが変わっていた

またもやmsys2絡みのお話

本日(2016-06-04 09:09 JST)にpacman -Syuして再起動しようとしたら一瞬プロンプト画面が出るんですが消えて何も出ない

以前の話でプロンプト消えるのはそれかなーと,以前の設定に戻してみだんですが,コマンドプロンプト画面が出るだけ

最終的に,C:\msys64\msys2_shell.batがなくなっていて,C:\msys64\msys2.exeを直接ダブルクリックすればいけることに気づきました.もしかしたらオフィシャルとかで書いてあったのかもですね(よく調べてない)