Daily Grind

システム開発関連の忘備録です

テキストタグが1つしかない場合にEnterが押されたときの対策

テキストタグが1つしかない場合にEnterが押されたときの対策として
不可視のダミータグを設置する。

<div style="position:absolute;visibility:hidden;"><input type="text" name="DUMMY"></div>

こうしないとinput type ="image"のボタンの座標がPOSTで飛ばなかった。

テキストタグが2つ以上だと起きないらしい。

ajaxサンプル

hello.cgi

#!/usr/bin/env ruby
sleep(3)
require "cgi" 
cgi = CGI.new
name = cgi['name']
name = CGI.escapeHTML(name)    # セキュリティ対策
puts "Content-type: text/html charset: euc-jp" 
puts
puts "こんにちは、#{name} さん!\n"


hello.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="euc-jp">

<title>Hello 0.3</title>
<script type="text/javascript">
// XMLHttpRequest オブジェクトを取得するためのユーザ定義関数
function getXHR() {
    var req;
    try {
        req = new XMLHttpRequest();
    } catch(e) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            req = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return req;
}

// [送信] ボタンクリック時に実行されるイベントハンドラ
function asyncSend() {
    var req = getXHR();
    // 非同期通信時の処理(コールバック関数)を定義
    req.onreadystatechange = function() {
        var result = document.getElementById("result");
        if (req.readyState == 4) {        // 通信の完了時
            if (req.status == 200) {    // 通信が成功した時
                result.innerHTML = req.responseText;
            } else {    // 通信が失敗した時
                result.innerHTML = "サーバエラーが発生しました。";
            }
        } else {        // 通信が完了する前
            result.innerHTML = "通信中...";
        }
    };
    // サーバとの非同期通信を開始
    req.open("GET", "hello03.cgi?name=" +
        encodeURIComponent(document.fm.name.value), true);
    req.send(null);
}
</script>
</head>
<body>
<h1>Hello 0.3</h1>
<h3>非同期通信テスト</h3>
クライアントから GET で送られたデータをサーバー側で非同期で処理し、クライアントにデータを戻します。サーバーの処理中にクライアントは別の作業を行うことができます。
<hr>
<form name="fm">
<label>名前:
<input type="text" name="name" size="15"></label>
<input type="button" name="submit" value="送信" onclick="asyncSend()">    
</form>
<div id="result"></div>
</body>
</html>

ネットワークトラフィックを観察

サーバのリソースモニタリングによく利用するsarコマンドだが、
これでネットワークのトラフィック状況も観察できるらしい。

sar -n DEVで、インターフェース毎の受信/送信パケット数やバイト数を記録する。

以下の例は、トラフィック情報を1秒毎に20回分出力する。

$ sar -n DEV 1 20


これを上手い具合にスクリプトにセットしてログに吐かせる。

以下、出力結果の項目内容。

IFACE インタフェース名
rxpck/s  1秒間あたりの受信パケット数
txpck/s 1秒間あたりの送信パケット数
rxbyt/s 1秒間あたりの受信バイト数
txbyt/s 1秒間あたりの送信バイト数
rxcmp/s 1秒間あたりの圧縮受信パケット数 (for cslip etc.)
txcmp/s 1秒間あたりの圧縮送信パケット数
rxmcst/s 1秒間あたりのマルチキャスト受信パケット数

参考
https://open-groove.net/jmeter/sar-network-monitor/
http://www.syboos.jp/linux/doc/sar-command.html
http://linux.alohakeakua.net/archives/488

ネットワークIF名の変更

以下は、自動認識されたネットワーク・インターフェース名を変更する手順である。

 ・eth1のeth0への変更
 ・対象は、CentOS 6.x、Scientific Linux 6.x、Debian GNU Linux 6.0.x、openSUSE 11.x


1. MACアドレスの取得
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 CentOS 6.x、Scientific Linux 6.xの場合のみ実施)

 ifconfig -aの実行結果のHWaddrの値を参照する。

2. 設定ファイルの編集
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 (1) CentOS 6.x、Scientific Linux 6.xの場合


  (a) /etc/sysconfig/network-scripts/ifcfg-eth0


   HWADDR=後にMACアドレスを設定する。
   (例) HWADDR="11:22:33:44:55:66"


  (b) /etc/udev/rules.d/70-persistent-net.rules


   NAME="eth1"のeth1をeth0に変更する。


 (2) Debian GNU Linux 6.0.x、openSUSE 11.xの場合


  (a) /etc/udev/rules.d/70-persistent-net.rules
  
   ここのNameを書き換えてリブート


   CentOS 6.xの場合の(b)と同じ。


3. 変更内容の反映
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 変更内容の反映のため、リブートを行う。

zabbixサーバ インストール手順

インストール
 ̄ ̄ ̄ ̄ ̄ ̄ ̄


MySQL インストール
http://www.server-world.info/query?os=CentOS_6&p=mysql&f=1

■Zabbix 2.4 を yumでインストール(CentOS6.5)
https://blog.apar.jp/linux/334/


※zabbixインストール時の「Check of pre-requisites」で
「Timezone for PHP is not set. Please set "date.timezone" option in php.ini.」
が出る場合の対処は以下。(タイムゾーンを設定する)
http://comp.senseofwonder.org/2009/05/200905291334.html

■Zabbix 2.2 を使って、テキストログの監視を行う方法
http://www.checksite.jp/zabbix22-textlog-watch/


ログ監視
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
■Zabbixでログ監視を設定してみる
http://komeiy.hatenablog.com/entry/2015/02/08/152721

①ログ監視用Itemの設定
「設定」-「テンプレート」-「アイテムの設定」-「アイテムの作成」

 名前:watch_log
 タイプ:Zabbixエージェント(アクティブ)
 キー:logrt["/xxx/xxx/LOGS/xxx-[0-9]{6,6}\.log$"]  ※監視したいログファイル
 データ型:ログ

②ログ監視用Triggerの設定
 ①で追加したアイテムを選んで「トリガーの作成」

yum コマンドでDVDからパッケージをインストール

■参考ページ
http://virtual.cocolog-nifty.com/virtualmachine/2013/12/yum-dvdiso-cent.html


ディレクトリ /etc/yum.repos.d/ にレポジトリファイルを作成します。
 今回は centos-dvd.repo という名前にし、次の内容を登録しました。
 ※ "baseurl"と"gpgkey"の先頭は"file://"に続けて DVD(ISO イメージファイル)の
 マウントポイントを記載します。

[centos-dvd]
name=CentOS 6.5
baseurl=file:///mnt/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

■DVD(ISO イメージファイル)をマウントします。

[root@centos yum.repos.d]# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@centos yum.repos.d]#

■設定確認を兼ねて、パッケージの一覧を表示します。

[root@centos yum.repos.d]# yum --disablerepo=\* --enablerepo=centos-dvd list
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
MAKEDEV.x86_64                            3.24-6.el6                  @anaconda-CentOS-201311272149.x86_64/6.5
acl.x86_64                                2.2.49-6.el6                @anaconda-CentOS-201311272149.x86_64/6.5
aic94xx-firmware.noarch                   30-2.el6                    @anaconda-CentOS-201311272149.x86_64/6.5
  ~
途中省略
  ~
zlib-static.x86_64                        1.2.3-29.el6                centos-dvd
zsh.x86_64                                4.3.10-7.el6                centos-dvd
zsh-html.x86_64                           4.3.10-7.el6                centos-dvd
[root@centos yum.repos.d]#

■インストールします。

yum --disablerepo=\* --enablerepo=centos-dvd install (パッケージ名)
                                                                              • -

以下、もっと簡単な方法

新しいマウント先のディレクトリを作成します。

# mkdir /media/cdrom

新しいマウント先にOSインストールメディアをマウントします。

# mount /dev/dvd /media/cdrom

OSインストールメディアのアイコンがデスクトップに表示されます。

パッケージのインストールを行います。

yum --disablerepo=\* --enablerepo=c6-media install (パッケージ名)

OSインストールメディアのマウントを解除します。

# umount /media/cdrom

作成したマウント先のディレクトリを削除します。

# rmdir /media/cdrom