linuxで cpu使用率を見るコマンド

サーバー監視をするため data収集するのに良いコマンドは無いか?
と言うことで internetを調べたら、
sar
mpstat
uptime
w
とかコマンドが出てきました

時間がかかる phpの makeを実行させている時の結果です

[root@vine62 ~]# w
10:44:32 稼働 6 日間, 22:53, 2 ユーザ, 負荷平均率: 1.03, 0.72, 0.38
ユーザ 端末 場所 ログイン@ 待機 JCPU PCPU 現プロセス名
hoge pts/0 192.168.1.121 09時42分 0.00秒 0.06秒 0.00秒 sshd: hoge [priv]
hoge pts/1 192.168.1.121 10時12分 3:04分 13.18秒 0.00秒 sshd: hoge [priv]

[root@vine62 ~]# uptime
10:44:36 稼働 6 日間, 22:53, 2 ユーザ, 負荷平均率: 1.03, 0.72, 0.38

[root@vine62 ~]# mpstat -P ALL
Linux 3.4.87-2vl6 (vine) 2014年06月29日 _x86_64_ (2 CPU)

10時44分43秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10時44分43秒 all 0.17 0.00 0.06 0.13 0.00 0.00 0.00 0.00 0.00 99.64
10時44分43秒 0 0.16 0.00 0.06 0.24 0.00 0.00 0.00 0.00 0.00 99.54
10時44分43秒 1 0.18 0.00 0.06 0.02 0.00 0.00 0.00 0.00 0.00 99.74

wと uptimeは同じ表示をすると書いてあったので、同じ数字が出てきて良いんですが、mpstatは何か数値が違っています
cpu使用率の目的は、サーバー監視でグラフ化なので、uptimeの 5分平均値を 100倍して intで記録すれば良いかな?

そう難しいモンでも無かったんで、/proc/statを一定時間で差を見て、割合を計算することにしました

/proc/stat の各数字の意味は以下の通りです

[root@vine62 ~]# cat /proc/stat
#cpu 328546 104 107989 151659827 209779 0 2348 0 0 0
#cpu0 167990 36 59142 75713283 190539 0 2278 0 0 0
#cpu1 160556 68 48847 75946544 19239 0 69 0 0 0
#1 user
#2 nice
#3 system
#4 idle
#5 iowait
#6 irq
#7 softirq
#8 steal
#9 guest
#10 guest-nice

JpGraphで GD imageantialiasエラー

error25128
グラフを書かせるサンプルで表示させようとしたところ、上のようなエラーが出ました

ん?、phpを installするとき GDを有効にしわすれてたか?
と思って確認しましたが、有効なようです
phpinfo

結局、internetに聞いてみたところ、
/usr/local/lib/php/JpGraph/gd_image.inc.php
(JpGraphの srcディレクトリーにあったファイル)
の 110行目あたり
// JpGraphError::RaiseL(25128);//(‘The function imageantialias() is not available in your PHP installation. Use the GD version that comes with PHP and not the standalone version.’)
ってぎょうに // を付けてコメントにすれば良い、と言うページを見つけました
確かにコメントアウトしたらグラフ表示できたけど、それで良いの???

サーバーを変更して文字化け

今回、ホームページを公開している自宅サーバーの更新を行ったのですが、linuxの文字コードが EUCJPから UTF8になりました
私のホームページは、今まで EUCJPでした
linuxの文字コードが UTF8になっても、別に問題無いだろう
と思っていましたが、一部文字化けを起こしてしまっているページを発見しました
桜島の風
このページちょっと特殊な操作を行っていて、アクセスすると、気象庁の hpよりその時の桜島の風向き、爆発回数を取得して表示するようにしているのです
そのデーターを取得するスクリプトは、前のサーバーからコピーしただけなんで、別段文字コードの処理が変わってしまうとか思いませんでした
データーを取得する lynxとか wgetとかで取得する時点で文字コードが変わってしまっているんでしょうか
それとも、文字コードを操作している iconvとか nkfとか、前のサーバーでは必要で無かった文字コードのオプションが、デフォルト値が変わってしまっていて新たに必要とか?
windows7の PCから、teratermでログインして編集しているので、編集している画面で文字が正常に表示していても、hp上で表示すると文字化けしたりして、どれが正常に表示される文字なのか、正確に判断するの難しいんだよなぁ

通常の htmlのページも EUCJPから UTF8にしちゃおうかなぁ
これだったら、一気に変換すれば良いだけだもんな
ちなみに、この wordpressのブログは、wordpress自体が UTF8に変わっていたので、中の文書 (mysqlに記録されている) も、サーバー移設時にUTF8に変更しました

サイバーナビ ミュージックサーバーの削除

パイオニア カロッツェリアのサイバーナビですが、mp3とかを SD経由で HDD(ミュージックサーバー)に転送できますが、1曲づつの削除以外のメニューがなかなか見付かりません
と言うことでメモです

AV – MSV – リスト – オリジナル – 選ぶ – 終了 – 四角 – 詳細編集 – プレイリストの詳細情報編集 – 消去 – トラック消去 – 全選択 – 消去

トラック消去の部分で、別の物を選ぶと、削除の効率上がるかもしれません(なるべく多くが分類分けされてる項目で削除していった方が良い)

phpで mysqlの結果をファイルに書き出す方法

今回のサーバーでは、温度とかの結果を、自作shスクリプトで取得、mysqlへ保存、GNUPLOTでグラフ出力
と思っているのですが、自作shスクリプトと mysqlへ保存は出来上がりました
次は GUNPLOTでグラフ出力なんです
phpから mysqlのクエリーして、その結果をファイルへ出力します
GNUPLOTの X軸は日付時刻、Y軸が値ですから、

19119 2014-06-14 17:41:00 40 43 658 989 38 38
19118 2014-06-14 17:40:00 39 44 688 999 38 38
19117 2014-06-14 17:39:00 39 42 687 984 38 38

のように出力できればまずはよしとします
以下の phpは、画面上に select文の結果を出力して、/tmp/kekka.txtにも書き出します

<?php

$server = ‘localhost’;
$user_name = ‘user’;
$passwd = ‘pass’;
$db_name = ‘data1′;
$outfile = ‘/tmp/kekka.txt’;
$kaigyou="\n";

$sql = ‘SELECT * FROM sensors order by id desc limit 10′;

$mysqli = new mysqli($server, $user_name, $passwd, $db_name);
if ($mysqli->connect_errno) {
echo ‘Failed to connect MySQL’;
echo $mysqli->connect_errno;
exit();
}

$mysqli->set_charset(‘utf8′);
$result = $mysqli->query($sql);

// http表示用
echo "<meta HTTP-EQUIV=\"Content-Type\" content=\"text/html; charset=UTF8\">";

// 一行ずつ結果を取得

for($i=0; $i<$line_num; $i++){
$row = $result->fetch_row();
foreach($row as $val) {
echo $val .’ ‘;
file_put_contents($outfile, $val, FILE_APPEND | LOCK_EX);
file_put_contents($outfile, " ", FILE_APPEND | LOCK_EX);
}

echo ‘<br />’;
file_put_contents($outfile,$kaigyou, FILE_APPEND | LOCK_EX);
}

$result->close(); //結果セットを開放
$mysqli->close(); //データベース接続を閉じる
?>

1個 1個 file_put_contentsしてて効率悪そ、、、、、

sambaサーバーの文字コード

linuxサーバーを更新したんですが、linux自体が EUC-JPから UTF-8に文字コード変わっていました
まあそれは時代の流れで良いとして、sambaサーバーが困りました
今まで通り EUC-JPで行くか?、と思いましたが、簡単だったので、文字コード UTF-8にしました
teratermでアクセスしても、windows7からエキスプローラーで見ても、どちらも正常に漢字が表示されます
/etc/samba/smb.confの中の
[global]
unix charset = UTF-8
dos charset = cp932
display charset = UTF-8
にして、
sambaルートから、
convmv -r -f euc-jp -t utf-8 * –notest
でファイル名を UTF-8に変換しました

幅を狭めると本文が表示されない

wordpressの 3.9.1ですが、これ、横幅を狭めていくと本文表示が消えちゃうんです
スマホから自分のサイトを表示させて気が付きました

これは本文表示が出ている状態
横幅 385px

これが、上の本文が出ている状態から 1pixel狭めた状態
横幅 384px

wordpress上にログインの表示を出さない

ログインを押して表示されるのは、wp/wp-login.phpですが、これ phpで書かれていて、ipアドレスで表示させない!、とか出来るはずですが、ちょっと敷居が高かったので、簡単な apacheの方で wp-login.phpに制限かけました

conf/httpd.confに以下の行を追加しました


Order deny,allow
Deny from all
Allow from 192.168.1.0/255.255.255.0 127.0.0.1



Order deny,allow
Deny from all
Allow from 192.168.1.0/255.255.255.0 127.0.0.1

wp-login.phpに外部からアクセスすると 403エラーになります

phpの中でやろうとすると

$ipadd1=getenv(‘REMOTE_ADDR’);
if ( $ipadd1 == ’192.168.1.122′ ) {
ここがアドレス一致したら実行される部分
}
な筈なんだけど、wp-login.php、長くてどこに制限かければいいか画面でやめました

wordpress 標準のスタイルで 『コメントをどうぞ』 を消す方法

wordpress3.9.1にしましたが、設定ページでコメントをできないようにしても、表示されるページ上から、『コメントをどうぞ』の表示が消えないんです
サイト管理 – 設定 – ディスカッション – 新しい投稿へのコメントを許可する の×を消す

表示されてる『コメントをどうぞ』をクリックしても、実際にはコメントの投稿ページは表示されないんですが、どうも気分悪い
と言うことで、ソースから削除しました

wp/wp-content/themes/twentyfourteen/content.phpの 37行目

の行を削除

その他にも content-gallery.phpなど、同じ行があるので、そちらも削除した方が完璧かもしれません

wordpressの移設

今まで、バージョンアップが面倒(難しい)ので、wordpressは、ME1.5と言う古いのを使用していました

今回、サーバーを新しいのに更新し、linux,mysql,php等を最新のにしたら、wordpressが phpのエラー(正確にはワーニング)を表示するんです

Strict Standards: Only variables should be passed by reference in /hogehoge/legacy-b4/wp/wp-includes/gettext.php on line 66
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /hogehoge/legacy-b4/wp/wp-includes/functions-formatting.php on line 76
Warning: preg_replace_callback(): Requires argument 2, ‘ stripslashes(‘$1′) . clean_pre(‘$2′) . ‘

' ',
to be a valid callback in /home/localhost/legacy-b4/wp/wp-includes/functions-formatting.php on line 76

調べると、構文の使い方がよろしくないので新しいバージョンでは使わないでくれ
ってワーニングなんですが、それがどこか logに記録されるのならまだしも、ブログのページ上に表示されるのでかっこ悪いんです
また、その該当する命令が、.phpのプログラムのあらゆる所に使われているという

php.iniの
display_errors = On
を Offとすればワーニング出ないんですが、それで見なかったことにするのもちょっとオイオイなんで、重い腰を上げて wordpressを最新版にしました!!

難しかったこと
文字コードが、ME1.5はlatin1、3.91はUTF8と異なる
mysqlのtable構造も異なる
wordpressのページにはこうやればバージョンアップできると書いたページがある (が、試したができなかった。ME1.5じゃダメ?)

と言うことで、以下の方法でブログの中身を最新の ver3.91へ持ってきました

(1) 古いサーバーより mysqldumpコマンドで発言のテーブルのみを mysqlからバックアップ
(2) 新しいサーバーへ持ってきて iconvコマンドで文字コード変更
(3) 新しいサーバーへ mysqlコマンドでバックアップをリストア
(4) insert文を使って、新しい databaseへ必要な tableのみをコピー

これやっても、カテゴリーは table構造がまるで異なっていて復元できなかったなぁ
まあ、チマチマ、カテゴリーだけは設定していくか、、、、、

ちなみに (1)から (4)で使用したコマンドは
(1) mysqldump db名 wp_posts --default-character-set=latin1 > old.sql
(2) iconv --byte-subst=X -f EUC-JP -t UTF-8 old.sql > UTF8.sql
その後、このファイル内の文字列 latin1を UTF8に変更
別の database名で新しい wordpressを起動して、table構造を作成しておく
(3) mysql -u root wp < UTF8.sql
(4) mysqlに入っておいて use 新しいdb名
delete from wp_posts; をして、新しいテーブルをまず削除しておく
次に wp.wp_postsより、新しいdbのwp_postsへ必要なテーブルのみをコピーする
insert into wp_posts (ID,post_author,post_date,post_date_gmt,post_content,post_title,post_excerpt,post_status,comment_status,ping_status,post_password,post_name,to_ping,pinged,post_modified,post_modified_gmt,post_content_filtered,post_parent,guid,menu_order)
select ID,post_author,post_date,post_date_gmt,post_content,post_title,post_excerpt,post_status,comment_status,ping_status,post_password,post_name,to_ping,pinged,post_modified,post_modified_gmt,post_content_filtered,post_parent,guid,menu_order
from wp.wp_posts

これで一応表示するようにはなりました、、、、ふぅ