Bashスクリプトやワンライナーから直接SQLiteを操作する方法です。せっかくなのでPSコマンドで出力したプロセスの一覧をDBに格納するところまでやってみました。
Bashからsqliteを操作する方法
DB作成方法。
echo ".open db_name" | sqlite3
SQL文投入はこんな感じ。
sqlite3 db_name "SQL文"
Bashスクリプト例(PSコマンドの結果をDBに投入)
後はスクリプトに組み込むだけ。
PSコマンドの結果をDBに取り込んでみました。
#!/bin/bash if [ $# -ne 1 ];then cat <<_EOS_ Usage $0 databasefile _EOS_ exit -1 fi if [ ! -x $(which sqlite3) ];then echo "sqlite3 not found." exit -1 fi cd $(dirname $0) dbfile=$1 # Create Database if [ ! -e ${dbfile} ];then echo ".open ${dbfile}" | sqlite3 fi option="-noheader -separator ," sqlite="sqlite3 ${option} ${dbfile} " # Table と Indexの作成 ${sqlite} "CREATE TABLE IF NOT EXISTS ps (\ date_time TEXT,\ user TEXT,\ pid INT,\ cpu_percent REAL,\ mem_percent REAL,\ vsz INT,\ rss INT,\ tt TEXT,\ stat TEXT,\ started TEXT,\ time INT,\ command TEXT\ );" ${sqlite} "CREATE INDEX IF NOT EXISTS ps_date_time_idx ON ps(date_time)" # PSコマンドの結果をTableに挿入 date_time=$(date +"%Y-%m-%d %H:%M:%S") ps auxwwwh | sed -E "s/ */ /g" | while read row do ${sqlite} "INSERT INTO ps VALUES(\ '${date_time}',\ '$(echo $row | cut -d" " -f1)',\ '$(echo $row | cut -d" " -f2)',\ '$(echo $row | cut -d" " -f3)',\ '$(echo $row | cut -d" " -f4)',\ '$(echo $row | cut -d" " -f5)',\ '$(echo $row | cut -d" " -f6)',\ '$(echo $row | cut -d" " -f7)',\ '$(echo $row | cut -d" " -f8)',\ '$(echo $row | cut -d" " -f9)',\ '$(echo $row | cut -d" " -f10)',\ '$(echo $row | cut -d" " -f11-)'\ );" done
参考
URL