ブログせつめい

このブログはタイトルの通り、メモ代わりです。
内容に関しては誤っている個所があるかと思いますので、参考にされる場合は、要検討のうえご利用ください。
また、気になったことなどLinux以外の話もあります。

2011年11月28日月曜日

crontab⇒logrotate

上の流れ。何回か書いてんだけど忘れる。忘れる。で見直すけど自分が何かいてるかわかんない。

なので今度こそ。。。。。


■logrotateの起動

① cronがrunpartsで/etc/cron.daily/logrotateを読みにいく。
② 読んだファイルから/etc/logrotate.conf(グローバルな設定ファイル)を読んでlogrotate起動
③ /etc/logrotate.confはディレクティヴ "include"で個別?ローカル?のローテート設定を読みに行く。

※グローバルな設定ファイルはローカルな設定ファイルで上書きできる。
 なので、基本的にローカルでちゃんと設定すればいいわけだ。
 余計な設定をグローバルに書いてるとnoとかで否定しないといけないので最小限がいい。


■ローテートの検証

設定した項目が正常に動作しているかを確認するために、
logrotate コマンドを用いる。

logrotate -d ログ設定ファイル
⇒文法チェック。 実際にローテートはしない。

logrotate -f ログ設定ファイル
⇒実際に(強制的に)ローテートを行う。
※ これたぶん個別のファイルしかみてないから、ローカル設定とかを指定したとき、
   グローバル読まない気がする。。。(でもそんな感じの動きをしたよ)

-fの場合、圧縮や、世代管理等のディレクティブ機能の検証は可能だが、
日付の指定(daily,weekly,montlyとか)を確認しようとすると、
やっぱりOSの日付をいじらないとだめっぽいなぁ。
いい方法ないかなあ。。。。。
いちいち日付をちょっと前に設定してーできたかみて できてたら日付戻す
これめんどくせーと思うんだおね。。。。

で、実際に検証したいんだけどrhel6.1だと 
/etc/crontabの設定がされてない。
cronの動作は、
/etc/anacrontabがやってるらしい。

これだと、何時にやるかローテートするかわかんないので、
/etc/crontabにべた書き設定すればいい・・・はず(未検証)

これからやりますこれから。

★追記。
しらべりゃここにのってたわ。
http://www.suzu841.com/qpopper.html
付加情報に関してもここで、使う意味がわかーるわカール


■付加情報

● 最後にローテートされた日付は、 /var/lib/logrotate.statusをみれば書いてある
  これは単純に 20111128 とかこんなふうにかいてある。

crontab,anacrontab

RHEL6.1で /etc/crontabの設定をみるとなんも入ってない。
何時に動くんだよ!

わかんなかったので調べた。

じゃあどこで dailyとかweeklyとかやんのかというと /etc/anacrontab

==============================================
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

=================================================


こんなんがあって、

1 5 cron.daily nice run-parts /etc/cron.daily

period —コマンド実行頻度(日単位) ⇒ 1

delay —分での遅延 ⇒ 5

job-identifier ?⇒ cron.daily

command —実行するコマンド ⇒  nice run-parts /etc/cron.daily
指定したディレクトリ(/etc/cron.daily)以下のスクリプトファイルを全部実行する(run-parts)

引数なしで実行すると nice は現ユーザのスケジューリング優先度を表示.
優先度は「-20~19」までの範囲で設定。値が小さいほど優先的に実行。
優先度パラメータが無い場合は優先度 10 で実行。
負の値の優先度を与えることが可能なのは root ユーザのみ



んで、かくかくしかじか、結局 /etc/crontabで設定しろってことのようだ。

こんなめんどい設定になったのは仮想化のせいだとか。。。
でもサーバー上で仮想環境構築するメリットがイマイチ私にはワカラナイ。
レガシーなOSでの検証とか簡単な機能試験とかそういうのは使えるかもしれないけど。。。。
でも新たにOSインストールしなくても既存ファイルのコピーですむのはいいねぇ。。。
最近のvmwareとか結構何でも動くしね。


間を詳しく知りたい人は以下の引用元から。とても丁寧ですた。
http://aikotobaha.blogspot.com/2011/02/rhel6-7cronanacron.html

2011年11月20日日曜日

DHCP アドレス解放/再取得

ブログたいとるにあってないけど

DHCPでアドレス配布されたのにうまくネットワークに・・・・(ry
というときがある。

現在のIPアドレスを「開放」  ipconfig /release

IPアドレスを「再取得」 ipconfig /renew




2011年11月16日水曜日

kate

KDEに入ってるkate このエディタ好き。

スキーマの設定が自由にできるのはいいんだけど、設定自分でやるのめんどくさい

下記で背景黒のスキーマがダウンロードできる。
centos6で確認。
解凍した中に入ってるinstall.sh実行するだけ。


設定一つ一つかえんのめんどくせーときは使えるかなぁ。

ソースコードタグシステム

kernelのソースコードをよまなきゃいけなかったので、便利なものがないかと探した結果これ。
作業時間はスペックにもよるけど、膨大なソースをHTML化するため
時間がかかる。 低スペックXPでは、相当時間がかかった3時間くらい?
i7搭載の7のvmware(centos6)では、体感40分くらい。(もっと遅いかもしれないし、早いかもしれない)


■globalのタグシステム
http://www.tamacom.com/global-j.html
C++のパッケージとかがないとインストール時につまづくのでインストールが必要。


ソースコードは別途ダウンロードして対応した。(どちらかわすれた・・・・。)

■kernel-2.6.32-131.0.15.el6.src.rpm
http://oss.oracle.com/ol6/SRPMS-updates/
http://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/

■インストール
./configure
make
make install

■コマンド
HTML化したい階層まで動いてから、
gtags -v;
htags -hav -I -F;



■windows版
http://adoxa.110mb.com/global/index.html
C:\usr\global\ 以下に上記で提供されているファイル(zipを展開したもの)を全部コピーする。
bin 以外のディレクトリは無くてもよい。windowsの環境変数PATH に C:\usr\global\bin を加えて、PCを再起動する。XPなら特に再起動はいらない。

手持ちのXPでやると、正常にいったけど、7でやったらhtagsがうまく使えずエラー。
問題解決はやってません。ggったけど事例がでてこなかったので。
だからvmwareのほうでやったんだけど・・・・。


コマンドはLinuxと同じ
※windows でrpm解凍する場合は、
http://www.kmonos.net/lib/info/xacr49-vul.ja.html
[ xacr51.exe ] 
D&Dで解凍可能

2011年11月14日月曜日

PythonでUnicodeEncodeError: 'ascii' codecがでた場合

yumとかでよく出るエラー。

http://d.hatena.ne.jp/omiyan/20110105/p1

これでなんとかなった。


ただ、作成するフォルダの位置が
RHEL6.1だと
/usr/lib/python2.6/site-packages になっている

2011年11月11日金曜日

logrotateの流れ

logrotate 自体はデーモンではないので cron と組み合わせて利用する。RedHat系ディストリビューションでの処理の流れは以下のようになっている:
  • cronrunparts コマンドで /etc/cron.daily/logrotate を読む。
  • /etc/cron.daily/logrotate は 主設定ファイルである /etc/logrotate.conf から設定を読み込んで logrotate を起動する。
  • /etc/logrotate.conf はそのディレクティブ "include" により、/etc/logrotate.d/ にある各ログ個別の設定を読み込む。


下記サイト詳しい。

http://www.asahi-net.or.jp/~aa4t-nngk/logrotate.html

2011年11月10日木曜日

acct()

システムコール

#include


int acct(const char *filename);

説明

存在するファイルの名前を引き数として呼び出されたら、アカウント (account) がオンにされ、終了したプロセスの記録が filename に追加される。 NULL を引き数として呼び出されたらアカウントをオフにする。
返り値

成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。
エラー

EACCES
指定したファイルへの書き込み許可がなく、書き込みが拒否された。
EACCES
指定したファイルへの書き込み許可がなく、書き込みが拒否された。または filename のディレクトリ部分の何れかのディレクトリに検索許可がなく拒否された (path_resolution (2) も参照すること)。または filename が通常 (regular) のファイルでない。
EFAULT
アクセスできるアドレス空間の外を filename が指している。
EIO
filename への書き込みにエラーが発生した。
EISDIR
filename がディレクトリである。
ELOOP
filename の実体にたどり着くまでのシンボリックリンクの数が多すぎる。
ENAMETOOLONG
filename が長すぎる。
ENFILE
オープンされたファイルの総数がシステム制限に達した。
ENOENT
指定されたファイルが存在しない。
ENOMEM
メモリが足りない。
ENOSYS
カーネルをコンパイルした時に BSD プロセス・アカウントが有効になっていない。この機能はカーネルのコンフィグの CONFIG_BSD_PROCESS_ACCT パラメータによって制御される。
ENOTDIR
filename の中でディレクトリして扱われている要素が、実際はディレクトリでない。
EPERM
呼び出したプロセスにはプロセス・アカウントを有効にするのに十分な特権がない。 Linux では CAP_SYS_PACCT ケーパビリティ (capability) が必要である。
EROFS
読み込みだけのファイルシステム上のファイルを filename が参照している。
EUSERS
使用可能なファイル構造体がないか、メモリが足りない。


プロセスアカウンティングを実行する際にやってる acctonってのはこれをよんでるっぽい。
で、CPUの定期割り込み時に元々取得してるアカウンティング情報をログとして書き出すと。
⇒manにはプロセスが終了した毎に取りにいく的な記述もあるから定期割り込みにのせてるのか微妙だなぁ。。。。。。。。。。。。。。。。。。。。。。。。


2011年11月1日火曜日

rpmコマンド

-ql オプションで、インストールされたパッケージのディレクトリ構造を表示。

-qiオプションで、インストールされたパッケージのディスクリプションやらを表示。

topコマンド

だんだん追記する予定。

TOPコマンドで情報表示中に「1」入力で、各CPUのCPU使用率を表示。
デフォルトの状態で表示されているものは、各CPUの平均のCPU使用率を表示する。
【オプション】

Rhel 6.1 クラスタ関連

◆ High Availability Add-on(旧RHCS)
【概要】
RHEL6で利用可能なHAクラスタ機能を提供するアドオン製品。
【利用方法】
「High Availability Add-On」のサブスクリプションをOSと別に購入する事で利用が可能。
【参考価格】
80,000円(2CPU/1年) ?????
http://www.jp.redhat.com/rhel/purchasing_guide.html

◆Resilient Storage Add-On
【概要】
クラスタ環境における共有ファイルシステム機能を提供。 GFS2(Global File System 2)
GFS2は High Availability Add-Onが提供するクラスタ管理機能を使用するため、HAクラスタ機能を使用しない場合でもGFS2の利用には、
High Availability Add-Onの機能が必要となる。
【利用方法】
「Resilient Storage Add-On」のサブスクリプションをOSと別に購入する事で利用が可能。
※このサブスクリプションには「High Availability Add-On」が含まれています。
【参考価格】
 80,000円(2CPU/1年) ?????
http://www.ecj.jp/U1301.doit?goods=1066023

RedHat 参考 : http://www.jp.redhat.com/rhel/purchasing_guide.html

プロセスアカウンティング概要

プロセスアカウンティングとは?

ユーザが、いつどんなコマンドを実行したのかを把握し、これをログとして残すことができる。


インストール

 RHEL6.1ではpsacctパッケージ


起動・停止方法

 ①/etc/init.d/psacct startor stop

   この方法で起動する場合、ログファイル名は、 /var/account/acct

 ② accton ログファイル名

   任意のログファイルを指定する事が可能

   ログファイル名を指定しない場合、プロセスアカウンティングを停止。


履歴参照方法

lastcommコマンドを入力する事で、ログファイルの内容をすべて表示することができる。

 

●取得できる内容は、

 コマンド名、flagプロセスを実行したユーザー名、コマンドを実行した端末(tty)プロセスの起動時間、プロセスが終了した時間

 flagの種類

  S :スーパユーザによって実行されるコマンド

  F :Fork後、次のEXECせずに実行されたコマンド 

  C : PDP - 11互換モード(VAXのみ)で実行されるコマンド(PDP-11 の後継でページング方式の仮想記憶を特徴とする32ビットコンピュータVAX?

  D :コアファイル生成をして終了するコマンド(core dump)

  X :シグナルで終了したコマンド(SIGTERM)


●オプションコマンド

  –-user      特定のユーザー出力

  --command   特定のコマンド出力

  --tty        tty 名のレコード出力

  これらを併用も可能だが、どちらかの条件を満たせば、出力を行ってしまう(or)どちらの条件も満たすようにするためには、 (AND)

  --strict-match  上記コマンドの前に指定することで、可能となる。

   --f         ファイルを指定してログを参照。ローテートファイルの参照に必要。(/var/account/ファイル名)

             ローテートしたファイルは圧縮されているため、解凍後のファイルを指定する必要がある。直接catでは不可。

             圧縮しない方法もとることはできる。下記設定ファイルで変更可能

============================

/etc/logrotate.d/psacct の内容

# Logrotate file for psacct RPM

/var/account/pacct {
#prerotate loses accounting records, let's no
# prerotate
# /usr/sbin/accton
# endscript
compress ⇒  ローテーションしたログをgzipで圧縮
delaycompress ⇒ログ圧縮作業を次ローテート時に遅らせる
notifempty ⇒ ログファイルが空ならローテーションしない
daily ⇒ ローテート(日単位)
rotate 31 ⇒ 世代管理(31世代)
create 0600 root root ⇒ パーミッション、ユーザ名、グループ名
  size=100k ⇒キロバイト指定で可能(?)指定したファイルサイズ以上でローテート
postrotate ↓
/usr/sbin/accton /var/account/pacct
endscript
}
postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行

===================================
上記ファイルは logrotate.dのディレクティブのコマンドをいろいろ使える。man logrotateで使えるオプションを閲覧可能。

【ローテート設定方法】
 /etc/logrotate.d/psacctの設定を変更する。
 できる方法としては、日単位、週単位、月単位でのローテートが可能で、世代管理も行う事が出来る。サイズ指定出来そう。調査中
 ローテート後は、pacct-20111006.gzのように保存される。 (圧縮設定にしている場合)


【その他特徴】
1.プロセスアカウンティング情報を記録するタイミングは、コマンドが終了するとき
2.ログファイルの参照には root の権限が必要
3.ファイルの容量が少なくなると、カーネルがProcess accounting pausedと出力し、アカウンティングを停止してしまいます
  また、一定量の空きができることで、カーネルがProcess accounting resumedを出力し、自動で取得を開始してくれる。( /proc/sys/kernel/acctの値が基準となっている)
   以下出力例 空き容量が 2% 以下でアカウンティングを停止して、 4% 以上で再開します。そして、空き容量の確認を、30秒毎に行います。
   % sysctl kernel.acct 空き容量が 2% 以下でアカウンティングを停止して、 4% 以上で再開。そして、空き容量の確認を、30秒毎に行う。
  kernel.acct = 4  2 30


検出されるコマンドは基本的にLinuxのシステムコマンド。
system()内で指定するコマンド等も検出可能。

ただ、スクリプト内で実行しているコマンド等もログに残ってしまう。。。。。