yuu_nkjm blog
2010-10-14(Thu) [長年日記] 編集
[Java][SQLite] SQLiteのJava API(JDBC)とdllのAll-in-oneパッケージ
SQLiteJDBC Xerialで公開されているSQLite JDBCが楽そう.今はsqlite-jdbc-3.7.2.jarを使用中.昔使っていたものでは,sqlite_jni.dllにパスを通したりする必要があったのだが,これはjarにクラスパスを通すだけでOK.楽ちん.
2010-10-13(Wed) [長年日記] 編集
[Java][log4j] log4jで生成するログファイルの位置をJavaシステムプロパティで切りかえる
ある環境でlog4jを使ってログを吐かせようとしたとき,log4j.xml内で絶対パスを使ってファイル指定をしてしまうと,違う実行環境(特にWindowsとLinuxとか異なるOS環境)では,困ったことになってしまう.
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="E:/hoge/log/sim.log"/>
Linux上では普通"E:/hoge/log"なんてディレクトリは存在しない.
Java/Log4j - きのさいとを参考にして,Javaのシステムプロパティを用いることで,ログファイルの生成場所を変更することが出来た.
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="${log.home}/sim.log"/>
上記のようにlog4j.xmlに書く.そして,実行時にJVMの引数に "-Dlog.home=E:/hoge/log"や"-Dlog.home=/home/usr/hoge/log"という様な形式で,log.homeに値を代入する.
JavaのシステムプロパティはSystem (Java Platform SE 6) getPropertiesなどを参考のこと.
つか,javaの実行ディレクトリからの相対パスにするのが簡単だな.
2010-10-11(Mon) [長年日記] 編集
[Linux][command][bash] サブディレクトリにある全ての(任意の範囲の)shファイルを起動する
execというディレクトリのサブディレクトリにシェルスクリプトが複数あり,それを起動したい.
ディレクトリ構成
exec/000/simulation.sh
exec/001/simulation.sh
…
exec/010/simulation.sh
全てのshを起動
find exec/ -print|grep sh|sort
上記のコマンドを叩くと,スクリプトの一覧が獲得できる.このコマンドの実行結果を変数xに格納し,forループで回しながら,各スクリプトをevalで評価する.
#!/bin/bash
x=`find exec/ -print|grep "sh"|sort`
for i in $x
do
`chmod +x $x`
eval $i
done
指定した範囲のshを起動
複数台のPCで実行をすることを考えると範囲指定が出来たほうが便利だと言うことで,別バージョンも作った.FIRSTとLASTの値を決め打ちではなく,lsやfindを使って決定したいが,ひとまずはいいや.
#!/bin/bash
FIRST=$1
INCR=$2
LAST=$3
if [ ! -n "$2" ]
then
echo -n "Input FIRST [def val = 0]: "
read FIRST
echo -n "Input INCR [def val = 1]: "
read INCR
echo -n "Input LAST [def val = 200]: "
read LAST
fi
if [ ! -n "$FIRST" ]
then
FIRST=0
fi
if [ ! -n "$INCR" ]
then
INCR=1
fi
if [ ! -n "$LAST" ]
then
LAST=200
fi
for i in `seq -f "%03g" $FIRST $INCR $LAST`
do
x=`find settings/exec/$i -print|grep "sh"|sort`
if [ ! -n "$x" ]
then
break
fi
`chmod +x $x`
eval $x
done
起動例
[usr@hoge ~/workspace]$ ./execSimulations.sh 5 1 7
settings/exec/005/simulation.sh
settings/exec/006/simulation.sh
settings/exec/007/simulation.sh
[usr@hoge ~/workspace]$ ./execSimulations.sh
Input FIRST [def val = 0]: 3
Input INCR [def val = 1]: -1
Input LAST [def val = 200]: 0
settings/exec/003/simulation.sh
settings/exec/002/simulation.sh
settings/exec/001/simulation.sh
settings/exec/000/simulation.sh
それにしても,Windowsでもbash欲しい….win-bashってどうなんやろうか.NYACUS(今はNYAOSなのか)ってWindows上でのシェル拡張を使っているけど,乗り換えてみようかな.