Open usb Tukubai

Open usb Tukubai
日経Linus を参考にシェルスクリプトの勉強です
今回は
Open usb Tukubai コマンドを使います
Open usb Tukubai に関しては
http://nlinux.jp/2013/08/article/
にアクセスし、
書籍に乗っているパスワードを入力することで
サンプルソースなどとともに
Open usb Tukubai
そして
ビジネス用の usb Tukubai がダウンロードできます
usb Tukubai に関しては
無料期間がきまっているため、今回は
Open usb Tukubai のみで行ってみます
まず、
tokukikaku_script/open-usp-tukubai-20130417.tar.bz2
をクリックして
Open usb Tukubai をダウンロード
cd ダウンロード
tar jxvf open-usp-tukubai-20130417.tar.bz2
で展開して
cd open-usp-tukubai-20130417/
sudo make install
でインストールできます
今回、インストールしたのは ubuntu 12/10 64bit
Open usb Tukubai はどのディストリビューションでも
うごくとのことなので、まずは Ubuntu で試してみました
また、サンプルが
tokukikaku_script/sample.tar.gz
にあるので、これを見ながら学習すると効率よく学ぶことができます

リソース状態推移のグラフ表示

リソース状態推移のグラフ表示
sysstat のデータをグラフ化してみることができるのが
isag
Ubuntu でインストールするには
sudo apt-get install isag
isag
で起動
起動したら
Data Source:
で見たいファイルを選択
次に、Chart から表示するシステム状況を選択
CPU Utilization を選ぶと
CPU使用状態をみることができる
いろいろとグラフ表示できるので
http://www.volny.cz/linux_monitor/isag/screens.html
のスクリーンショットも参考に

リソース状況の把握

リソース状況の把握
リソース不足を事前に検知することでトラブルを防止できる
リソースの使用率の推移を把握できているなら
ハードウェアの増設、交換も検討できる
このとき、抑えておくポイントは
リソース使用率の定期取得
リソース状態推移のグラフィカル表示
となる
リソース使用率の定期取得は
sysstat を使う
Ubuntu でのインストールは
sudo apt-get install sysstat
次に、定期取得設定
Ubuntu ではデフォルト設定で定期取得が無効なので
sudo vim /etc/default/sysstat

ENABLED=”false”

ENABLED=”true”
にして保存
sudo service sysstat start
で起動
定期取得された情報は
/var/log/sysstat/
に保存される
sa21
というように
sa日付
という形で保存されるのがバイナリーファイル
もうひとつsar日付というファイルが後でできるけど
こちらは、1日分のシステム状況をまとめた
テキストファイルになる
テキストファイルなので、エディタで確認可能
バイナリーファイルのほうは
sar コマンドに -r オプションをつければ確認できる
sar -f /var/log/sysstat/sa21
とすれば
Linux 3.5.0-36-generic (snowpool-Prime-Series) 2013年07月21日 _x86_64_ (8 CPU)
20時37分14秒 LINUX RESTART
というように内容をみれる
ファイル名を指定せず
sar -r
とすると
当日の情報が表示される
また、オプションで表示する時間の限定も可能
-s オプションで開始時刻
-e オプションで終了時刻
を指定可能
-u オプションを指定することで、
CPUリソース情報の取得もできる
CPUリソース取得のときに注意するべきは
その計算式
100 -(%idle + %iowait)
となる
各CPU情報の
(%user ~ %idle) は百分率の値で
合計すると100になる
そのうち $idle と %iowait

CPUが使用されていない時間の割合になる
このため、算出される値は、CPU使用率となる
この時間帯の平均使用率が低いなら
CPU負荷は少ないということになる
今回は
20:00~21:00のCPU使用率を見たいので
sar -u -f /var/log/sysstat/sa21 -s 20:00:00 -e 21:00:00

logwatch の定期レポート設定

logwatch の定期レポート設定
logwatch には
ユーザーに定期的にレポートを送信する機能がある
logwatch の定期レポートは
cron で実行されて
ユーザのメールボックスにおくられる
cron への登録は
apt-get でインストールしたときに自動で行われるので
これは設定する必要はない
この設定は
view /etc/cron.daily/00logwatch
で確認できる
ファイルの中の
#execute
/usr/sbin/logwatch –output mail
によって毎日メールがおくられてくる
この送られてくるレポートは、設定により
変えることができる
そのままの状態では設定ファイルがないので
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
でファイルをコピーして
sudo vim /etc/logwatch/conf/logwatch.conf
でファイルを編集する
これは、情報がありすぎると逆にわかりにくくなってしまうから
Service のところに
– をつければレポート対象から除外できるようになる
除外方法の例については
http://vps.zok.jp/logwatch/
を参考にさせていただきました
TmpDir = /var/cache/logwatch
というように一時ファイルの置き場が指定してあるけど
元々は存在しないので
sudo mkdir /var/cache/logwatch
でディレクトリを作成
これで、設定ができたので
実行しようとしたけど
mail コマンドがなかったので
http://d.hatena.ne.jp/Fiore/20080227/1204110665
を参考に
sudo apt-get install mailutils
でインストール
which mail

/usr/bin/mail
となっていればOK
これで、ようやく実行可能
sudo logwatch –Output mail
sudo mail
とすると
“/var/mail/root”: 4 messages 1 new 3 unread
U 1 Cron Daemon 日 7月 21 18: 29/1283 Cron N 4 logwatch@snowpool- 日 7月 21 19: 122/8506 Logwatch for snowpool-Pri
というように、メール一覧がでるので
Logwatch for
と書かれている4を入力
すると、メールになって送られたレポートを見ることができる
画面スクロールしたいのなら
スペースキーを押し
終了したいのなら q で終わらせることができる

log を整形して情報をまとめる logwatch

log を整形して情報をまとめる
Ubuntu の場合
log整形ツールの logwatch を使うことで
ログを集計し
結果を比較的見やすい状態に加工してレポートできる
また、期間
表示するレポートの種類指定も可能
期間と種類を指定すれば
トラブル時に必要な情報だけ絞り込んでレポートを表示できる
Ubuntu での インストールは
sudo apt-get install logwatch
途中でダイアログが出て、インストールするタイプを聞かれるので、今回はローカルのみを選択
まず、
sudo logwatch
を実行
デフォルトでは
logwatch は標準出力に、昨日のログを集計した
レポートを出力する
sudo ログのセクションをみると
sudo コマンドを使って root 権限で
どのコマンドを何回実行したのか確認できる
レポート作成期間、ログの種類の絞り込みは
logwatch のオプションを使う
レポート作成期間は、
–range オプションで指定
今日のログのレポートにするなら
sudo logwatch –range today
昨日のログレポートなら
sudo logwatch –range yesterday
2日前のログレポートなら
sudo logwatch –range ‘-2 days’
というように、-の後に何日前か指定
日付を指定するなら
sudo logwatch –range 2013/07/20
というように、直接指定でOK
取得できる全ての期間にしたいのなら
sudo logwatch –range all
3日前から今日まで、としたいのなら
sudo logwatch –range ‘since -3 days’
というように、
since -遡りたい日数 days
詳細な日数などの指定については
sudo logwatch –range help
で確認できる
logwatch のレポートの見方に関しては
Logwatchのレポートの見方
http://ameblo.jp/itboy/entry-10051133432.html
を参考にさせていただきました
logwatch では、取得できるログの種類を
サービス単位で扱う
サービスの種類は
ll /usr/share/logwatch/scripts/services/
で確認可能
ここにあるファイル名がサービス名になる
logwatch で過去1週間の
pam_unix
sshd
のログレポートを表示するなら
logwatch –Service pam_unix –Service sshd –range ‘since -7 days’
というようになる

有用なログをみつけるポイント

有用なログをみつけるポイント
まず、ログを絞り込むために使う情報は
ログの日時と出力元
トラブルあが発生した時間帯
問題のあるプログラム
ホストに検討がついているのなら、これらの情報で
ログを絞り込める
次に扱う情報が
ログのプライオリティ
プライオリティの種類は
debug
デバッグ情報
info
正常な状態で出力される情報
notice
正常だけど、重要な情報
warn
警告
err
エラー
crit
致命的エラー
alert
緊急に対応が必要なエラー
emerg
システムを使用不能
となる
err 以上のプライオリティのログの場合
トラブル原因に関係している可能性が高い
emerg > alert > crit > err >warn > notice > info > debug
という順番になり
一番深刻なのが
emerg
デフォルトでプライオリティが表示されるログファイル
そして
設定を変更してプライオリティを表示する設定にしたログファイルを使って、プライオリティで絞り込むことができる
そして、msg の情報からでも推測ができる
トラブルが発生している場合
msg の部分にもエラーメッセージが出力されることがある
error
fail(failure, faied) などのキーワードで
ログを絞り込むとエラー関連ログを絞り込みやすくなる
ログをキーワードで絞り込むには
エディタの機能を使うと便利
/ で検索してもいいけど
view コマンドでなら
:g/キーワード/
とすることで
キーワードに一致する行だけを表示することができる
もし、error というメッセージがある行だけを表示したいのなら
view /var/log/auth.log
で開いている場合、
:g/error/
とすれば、 error のある行だけ表示されるので見やすくなる
たくさんある場合、qを押すと元の画面に戻れる

ログの種類と書式について

ログの種類と書式について
トラブル発生時にログから情報を取得する手助けになるのは
ログファイルの種類
ログの書式変更
ログファイルから有用なログをみつけるポイント
これらを把握していることがより効率的な原因究明につながる
まず、ログファイルの種類
linux では、ログは
/var/log の下に出力される
Ubuntu なら
/var/log/
の下にたくさんあるので
ls /var/log/
で調べると、どんなファイルがあるのか確認できる
種類がたくさんあるので、その中の一部を紹介すると
syslog
システムの動作状態に関するログ
dmesg
カーネルのメッセージバッファのログ
OS起動時、動作時のカーネルメッセージが出力される
auth.log
認証関係のログ
boot.log
OS起動時のサービスメッセージのログ
dpkg.log
パッケージマネジャーの dpkg のログ
apt
パッケージ管理ツールのAPT のログが出力されるディレクトリ
wtmp
ユーザのログイン履歴ログ
who コマンドを使って開く
lastlog
ユーザが最後にログインした日時のログ
lastlogコマンドで確認
この中で、トラブル遭遇時に確認することが多いのが
syslog
ログを確認する時に注意することは
書き込み権限のあるユーザの場合なら
viewコマンド
http://www.linuxlic.com/command/view.html
とか
tail
less
などのコマンドを使い、読み込み専用で開くこと
これは、間違えてログの変更や削除をしてしまわないため
今回は
view コマンドで 認証関連ログファイル auth.log をみる
view /var/log/auth.log
で内容を確認
このときに出てくる書式が
ログ管理デーモンになるrsyslog の
RSYSLOG_TraditionalFileFormat
という書式
これは、
/etc/syslog.conf で
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
と定義されている
syslog 形式のログは
TIMESTAMP
HOSTNAME
といった、いくつかのプロパティから構成される
例えば view /var/log/auth.log
で見てみると
Jul 21 10:17:01 snowpool-Prime-Series CRON[5106]: pam_unix(cron:session): session closed for user root
というログがあり
Jul 21 10:17:01
の部分がTIMESTAMPで
ログが出力された日時
snowpool-Prime-Series

HOSTNAMEで、ホスト名
CRON[5106]:

syslogtag で、ログメッセージの出力元
プログラム名の表示
今回なら、
プロセスID 5106 の cronデーモンがログを出力している
pam_unix(cron:session): session closed for user root
はmsg で、ログの内容になる

ファイル拡張子の取得

ファイル拡張子の取得
#09 ファイルの拡張子を取得する
http://dotinstall.com/lessons/upload_image_php/4509
を元に、投稿されたファイルの情報を取得して
拡張子を設定する
今回は、保存するファイル名を決めておく
これは、アップロードされたファイルの名前をそのまま使うと被ることもあるので、面倒になるから
最初に、拡張子を決め、名前をつけていく
拡張子をつけるのは、ほぼ決まり文句で
$imagesize = agetimagesize($_FILES[‘image’][‘tmp_name’]);
これで、様々な情報が取得され
変数 $imagesize に格納される
中身を確認するには
var_dump() で
var_dump($imagesize);
で見ることができる
これにより、アップロードしたファイルの
縦横の幅
ファイルの種類などが解析される
これを使って、拡張子を決めていく
いろいろなファイルの拡張子があるので、
ここでは switch による分岐を行う
取得して比較する値は
[“mime”]=>
string(9) “image/png”
というように
mime というところ
今回、対応拡張子は
gif
jpg
png
のみにする
コードは
switch($imagesize[‘mime’]){
case ‘image/gif’:
$ext=’.gif’;
break;
case ‘image/jpg’:
$ext =’.jpg’;
break;
case ‘image/png’:
$ext =’.png’;
break;
default:
echo gif/jpg/png only !”;
exit;
}

投稿ファイルのエラーチェック

投稿ファイルのエラーチェック
#08 エラーチェックを行う
http://dotinstall.com/lessons/upload_image_php/4508
を参考に、投稿されたファイルにエラーがないかチェックする
編集するファイルは、upload.php
ファイルの中にある error というフィールドがあり
この中にいろいろな値が入っているので
これを使ってエラーチェックする
条件式は if でつくる
if($_FILES[‘image’][‘error’] != UPLOAD_ERR_OK){
echo “エラーが発生しました”;
exit;
}
とする
UPLOAD_ERR_OK
については
http://jp.php.net/manual/ja/features.file-upload.errors.php
に乗っているように
値は0で、エラーがなく、アップロード成功という意味
なので、 if の中で != となっているので error の値が0でない、つまりアップロード失敗したら、
echo でエラーメッセージを表示している
次に、ファイルサイズのチェック
ファイルサイズを調べるには
添付ファイルのサイズを調べる
$size =filesize($_FILES[‘image’][‘tmp_name’]);
で、一時ファイルの大きさを調べて格納
これを if で判定する
これで、ファイルサイズが0 !size
もしくは
ファイルサイズが MAX_FILE_SIZE を
超える場合にはエラーを echo で表示する
if’!isze || $size > MAX_FILE_SIZE){
echo “ファイルサイズが大きすぎます”;
exit;
}
とする
これで、大きいサイズのファイルをアップロードするとエラーが発生する

cron + async で定期差分バックアップ

cron + async で定期差分バックアップ
バックアップを毎日取得し
過去1週間分を保存する
対象とするのは設定ファイルとかコンテンツ
これらを毎日バックアップして
過去1週間分保存する
まずはわかりやすくコマンドで実行
rsync はフルパスにしてみた
実行環境は ubuntu12.10 64bit
sudo /usr/bin/rsync -a /var/www/ /backup/www-`/bin/date +%Y%m%d`
これを実行すると
/var/www/以下の内容が
/backup/www-バックアップした時の日付
という形式でバックアップされる
今回なら
www-20130720
となっている
このディレクトリの中には、
/var/www/ 以下のディレクトリがすべてコピーされている
`/bin/date +%Y%m%d`
は、バッククォートでかこっているため
実行結果を端末で入力したコマンドに渡すことができる
バッククォートの入力は
shift + @
これを cron で設定しておけば、バックアップが自動で行われる
大抵の例文だと深夜などにおこなうけど
ずっとパソコンをつけておけないという場合
食事やお風呂などの時間帯にしておくという方法もある
例えば、。
10 4 * * *
としてあると
毎日朝の4時10分にバックアップするけど
10 19 * * *
として夕方の7時ぐらいにバックアップという方法もある
また
バックアップを毎日取っていると、どんどんHDDやSSDの容量を使っていくので
必要に応じて削除することも必要
例えば、
sudo /usr/bin/find /backup/ -name www-* -mtime +6 -print0 | /usr/bin/xargs -0 /bin/rm -rf
とすると、古いファイルが消えるらしいけど
なぜか先ほどバックアップしたファイルも削除されていた
find コマンドのオプションに関しては
http://www.nxmnpg.com/ja/1/find
findコマンドを利用した便利なUNIXテクニック例
として
http://uguisu.skr.jp/Windows/find_xargs.html
があるので、このあたりをもう少し調べてみようと思います