• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            xiaoguozi's Blog
            Pay it forword - 我并不覺(jué)的自豪,我所嘗試的事情都失敗了······習(xí)慣原本生活的人不容易改變,就算現(xiàn)狀很糟,他們也很難改變,在過(guò)程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛(ài)傳出去,很困難,也無(wú)法預(yù)料,人們需要更細(xì)心的觀察別人,要隨時(shí)注意才能保護(hù)別人,因?yàn)樗麄兾幢刂雷约阂裁础ぁぁぁぁ?/span>
                 摘要: JavaSript模塊化    在了解AMD,CMD規(guī)范前,還是需要先來(lái)簡(jiǎn)單地了解下什么是模塊化,模塊化開(kāi)發(fā)?    模塊化是指在解決某一個(gè)復(fù)雜問(wèn)題或者一系列的雜糅問(wèn)題時(shí),依照一種分類的思維把問(wèn)題進(jìn)行系統(tǒng)性的分解以之處理。模塊化是一種處理復(fù)雜系統(tǒng)分解為代碼結(jié)構(gòu)更合理,可維護(hù)性更高的可管理的模塊的方式。可以想象一個(gè)巨大的...  閱讀全文
            posted @ 2014-09-10 18:09 小果子 閱讀(2135) | 評(píng)論 (0)編輯 收藏

            /**

            * Shiro-1.2.2內(nèi)置的FilterChain

            * @see =============================================================================================================================

            * @see 1)Shiro驗(yàn)證URL時(shí),URL匹配成功便不再繼續(xù)匹配查找(所以要注意配置文件中的URL順序,尤其在使用通配符時(shí))

            * @see   故filterChainDefinitions的配置順序?yàn)樽陨隙?以最上面的為準(zhǔn)

            * @see 2)當(dāng)運(yùn)行一個(gè)Web應(yīng)用程序時(shí),Shiro將會(huì)創(chuàng)建一些有用的默認(rèn)Filter實(shí)例,并自動(dòng)地在[main]項(xiàng)中將它們置為可用

            * @see   自動(dòng)地可用的默認(rèn)的Filter實(shí)例是被DefaultFilter枚舉類定義的,枚舉的名稱字段就是可供配置的名稱

            * @see   anon---------------org.apache.shiro.web.filter.authc.AnonymousFilter

            * @see   authc--------------org.apache.shiro.web.filter.authc.FormAuthenticationFilter

            * @see   authcBasic---------org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter

            * @see   logout-------------org.apache.shiro.web.filter.authc.LogoutFilter

            * @see   noSessionCreation--org.apache.shiro.web.filter.session.NoSessionCreationFilter

            * @see   perms--------------org.apache.shiro.web.filter.authz.PermissionAuthorizationFilter

            * @see   port---------------org.apache.shiro.web.filter.authz.PortFilter

            * @see   rest---------------org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter

            * @see   roles--------------org.apache.shiro.web.filter.authz.RolesAuthorizationFilter

            * @see   ssl----------------org.apache.shiro.web.filter.authz.SslFilter

             *@see   user---------------org.apache.shiro.web.filter.authz.UserFilter

            * @see =============================================================================================================================

            * @see 3)通常可將這些過(guò)濾器分為兩組

            * @see   anon,authc,authcBasic,user是第一組認(rèn)證過(guò)濾器

            * @see   perms,port,rest,roles,ssl是第二組授權(quán)過(guò)濾器

            * @see   注意user和authc不同:當(dāng)應(yīng)用開(kāi)啟了rememberMe時(shí),用戶下次訪問(wèn)時(shí)可以是一個(gè)user,但絕不會(huì)是authc,因?yàn)閍uthc是需要重新認(rèn)證的

            * @see                      user表示用戶不一定已通過(guò)認(rèn)證,只要曾被Shiro記住過(guò)登錄狀態(tài)的用戶就可以正常發(fā)起請(qǐng)求,比如rememberMe

            * @see                      說(shuō)白了,以前的一個(gè)用戶登錄時(shí)開(kāi)啟了rememberMe,然后他關(guān)閉瀏覽器,下次再訪問(wèn)時(shí)他就是一個(gè)user,而不會(huì)authc

            * @see =============================================================================================================================

            * @see 4)舉幾個(gè)例子

            * @see   /admin=authc,roles[admin]      表示用戶必需已通過(guò)認(rèn)證,并擁有admin角色才可以正常發(fā)起'/admin'請(qǐng)求

            * @see   /edit=authc,perms[admin:edit]  表示用戶必需已通過(guò)認(rèn)證,并擁有admin:edit權(quán)限才可以正常發(fā)起'/edit'請(qǐng)求

            * @see   /home=user                     表示用戶不一定需要已經(jīng)通過(guò)認(rèn)證,只需要曾經(jīng)被Shiro記住過(guò)登錄狀態(tài)就可以正常發(fā)起'/home'請(qǐng)求

            * @see =============================================================================================================================

            * @see 5)各默認(rèn)過(guò)濾器常用如下(注意URL Pattern里用到的是兩顆星,這樣才能實(shí)現(xiàn)任意層次的全匹配)

            * @see   /admins/**=anon             無(wú)參,表示可匿名使用,可以理解為匿名用戶或游客

            * @see   /admins/user/**=authc       無(wú)參,表示需認(rèn)證才能使用

            * @see   /admins/user/**=authcBasic  無(wú)參,表示httpBasic認(rèn)證

            * @see   /admins/user/**=user        無(wú)參,表示必須存在用戶,當(dāng)?shù)侨氩僮鲿r(shí)不做檢查

            * @see   /admins/user/**=ssl         無(wú)參,表示安全的URL請(qǐng)求,協(xié)議為https

            * @see   /admins/user/**=perms[user:add:*]

            * @see       參數(shù)可寫多個(gè),多參時(shí)必須加上引號(hào),且參數(shù)之間用逗號(hào)分割,如/admins/user/**=perms["user:add:*,user:modify:*"]

            * @see       當(dāng)有多個(gè)參數(shù)時(shí)必須每個(gè)參數(shù)都通過(guò)才算通過(guò),相當(dāng)于isPermitedAll()方法

            * @see   /admins/user/**=port[8081]

            * @see       當(dāng)請(qǐng)求的URL端口不是8081時(shí),跳轉(zhuǎn)到schemal://serverName:8081?queryString

            * @see       其中schmal是協(xié)議http或https等,serverName是你訪問(wèn)的Host,8081是Port端口,queryString是你訪問(wèn)的URL里的?后面的參數(shù)

            * @see   /admins/user/**=rest[user]

            * @see       根據(jù)請(qǐng)求的方法,相當(dāng)于/admins/user/**=perms[user:method],其中method為post,get,delete等

            * @see   /admins/user/**=roles[admin]

            * @see       參數(shù)可寫多個(gè),多個(gè)時(shí)必須加上引號(hào),且參數(shù)之間用逗號(hào)分割,如/admins/user/**=roles["admin,guest"]

            * @see       當(dāng)有多個(gè)參數(shù)時(shí)必須每個(gè)參數(shù)都通過(guò)才算通過(guò),相當(dāng)于hasAllRoles()方法

            * @see

            http://liureying.blog.163.com/blog/static/61513520136205574873/

            spring中 shiro logout 配置方式
            有兩種方式實(shí)現(xiàn)logout
            1. 普通的action中 實(shí)現(xiàn)自己的logout方法,取到Subject,然后logout
            這種需要在ShiroFilterFactoryBean 中配置 filterChainDefinitions
            對(duì)應(yīng)的action的url為anon
            <property name="filterChainDefinitions">
                        <value>
                            # some example chain definitions:
                            /index.htm = anon
                            /logout = anon
                            /unauthed = anon
                            /console/** = anon
                            /css/** = anon
                            /js/** = anon
                            /lib/** = anon
                            /admin/** = authc, roles[admin]
                            /docs/** = authc, perms[document:read]
                            /** = authc
                            # more URL-to-FilterChain definitions here
                        </value>

            2. 使用shiro提供的logout filter
            需要定義 相應(yīng)的bean
            <bean id="logout" class="org.apache.shiro.web.filter.authc.LogoutFilter">
                    <property name="redirectUrl" value="/loginform" />
                </bean>

            然后將相應(yīng)的url filter配置為logout如下
            <property name="filterChainDefinitions">
                        <value>
                            # some example chain definitions:
                            /index.htm = anon
                            /logout = logout
                            /unauthed = anon
                            /console/** = anon
                            /css/** = anon
                            /js/** = anon
                            /lib/** = anon
                            /admin/** = authc, roles[admin]
                            /docs/** = authc, perms[document:read]
                            /** = authc
                            # more URL-to-FilterChain definitions here
                        </value>

            http://kdboy.iteye.com/blog/1154652
            http://blog.csdn.net/peterwanghao/article/details/8084126
            http://www.oschina.net/question/593111_62454
            http://blog.csdn.net/shadowsick/article/details/17265625

            posted @ 2014-05-14 11:57 小果子 閱讀(72204) | 評(píng)論 (4)編輯 收藏

            確保安裝了python,大部分安裝失敗都是由于python版本過(guò)低導(dǎo)致。安裝之前,升級(jí)python版本,升級(jí)步驟 http://www.tomtalk.net/wiki/Python

            [root@SNDA-192-168-15-161 ~]# python -V
            Python 2.7.3
            開(kāi)始安裝:

            1).下載nodejs到本地并解壓縮
            [root@SNDA-192-168-15-161 node]# wget http://nodejs.org/dist/v0.9.0/node-v0.9.0.tar.gz
            [root@SNDA-192-168-15-161 node]# tar zxvf node-v0.9.0.tar.gz
            2).進(jìn)入到該目錄編譯和安裝
            [root@SNDA-192-168-15-161 node-v0.9.0]# cd node-v0.9.0
            [root@SNDA-192-168-15-161  node-v0.9.0]# ./configure --prefix=/usr/local/node/0.9.0
            這里安裝在了/usr/local/node/0.9.0目錄下
            [root@SNDA-192-168-15-161 node-v0.9.0]# make
            [root@SNDA-192-168-15-161 node-v0.9.0]# make install
            3).配置NODE_HOME
            [root@SNDA-192-168-15-161 node-v0.9.0]# vi /etc/profile
            在export PATH USER 。。。一行的上面添加如下內(nèi)容,并將NODE_HOME/bin設(shè)置到系統(tǒng)path中
            #set for nodejs
            export NODE_HOME=/usr/local/node/0.9.0
            export PATH=$NODE_HOME/bin:$PATH
            保存退出后執(zhí)行如下命令,使剛才的配置生效
            [root@SNDA-192-168-15-161 node-v0.9.0]# source /etc/profile

            執(zhí)行node -h命令驗(yàn)證設(shè)置成功

            [root@SNDA-192-168-15-161 ~]# node -h
            Usage: node [options] [ -e script | script.js ] [arguments]
                   node debug script.js [arguments]

            Options:
              -v, --version        print node's version
              -e, --eval script    evaluate script
              -p, --print          print result of --eval
              -i, --interactive    always enter the REPL even if stdin
                                   does not appear to be a terminal
              --no-deprecation     silence deprecation warnings
              --trace-deprecation  show stack traces on deprecations
              --v8-options         print v8 command line options
              --max-stack-size=val set max v8 stack size (bytes)

            Environment variables:
            NODE_PATH              ':'-separated list of directories
                                   prefixed to the module search path.
            NODE_MODULE_CONTEXTS   Set to 1 to load modules in their own
                                   global contexts.
            NODE_DISABLE_COLORS    Set to 1 to disable colors in the REPL

            Documentation can be found at http://nodejs.org/
            至此安裝設(shè)置完畢。

            運(yùn)行一個(gè)簡(jiǎn)單的node應(yīng)用程序 + socket.io,首先需要安裝socket.io模塊

            [root@SNDA-192-168-15-161 ~]# npm install socket.io

            [root@SNDA-192-168-15-161 ~]# vi app.js

            var http=require('http');
            var io =require('socket.io');
            var server = http.createServer(function(req,res){

                res.writeHead(200,{'Content-Type':'text/plain'});
                res.end('Hello world');
            });

            server.listen(process.argv[2]);

            var socket = io.listen(server);
            socket.on('connection',function(client){
                console.log('client has connected');
                client.on('message',function(){ });
            });
             

            [root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8001 &

            [root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8002 &

            [root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8003 &

            [root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8004 &

            更詳細(xì)的參照socket.io的官網(wǎng)的例子。

            websocket與node.js的完美結(jié)合

            http://wanshuiqianshan.iteye.com/blog/1618498

            posted @ 2014-01-20 10:11 小果子 閱讀(586) | 評(píng)論 (0)編輯 收藏

            前言: Nagios是相當(dāng)不錯(cuò)的監(jiān)控工具,被稱作是“監(jiān)控之神”,但同樣也有“難搞死”頭銜。發(fā)揮Nagios一切魅力的都是他的插件,正因?yàn)樨S富多樣的插件讓 nagios有血有肉。監(jiān)控的內(nèi)容不斷在變化,插件也不斷變化,默認(rèn)的一些插件可能越來(lái)越不能滿足需求,這個(gè)時(shí)候就要自己來(lái)寫些插件了。

            以下就是用我的第一個(gè)Nagios插件來(lái)說(shuō)明編寫方法和我遇到一些問(wèn)題調(diào)試方法。如果你有耐心可以通篇看完,應(yīng)該對(duì)第一次寫的人來(lái)說(shuō)會(huì)有很大幫助(如果你看不懂,可能是我寫得不清楚 那就沒(méi)辦法了 表達(dá)能力有限)

            需求:

            監(jiān)控普通磁盤的健康狀況(普通磁盤以外還有RAID、陣列的監(jiān)控是不同方法來(lái)做的,這里先不討論,先從最簡(jiǎn)單的入手),定期進(jìn)行檢測(cè),并進(jìn)行報(bào)警,報(bào)警內(nèi)容磁盤是否正常,不正常是什么狀態(tài)。

            分析編寫過(guò)程:

            我寫腳本的前提都是先從手動(dòng)成功完成,再到自動(dòng)化(我想其它人的思路應(yīng)該都一樣的)

            1、找到監(jiān)控磁盤的方法

            通過(guò)一番查找 smartctl 這個(gè)命令是比較不錯(cuò)的  centos slackware一般的默認(rèn)都有這個(gè)

            smartctl -H /dev/sda  只檢測(cè)狀態(tài)

            smartctl -i /dev/sda   只檢測(cè)硬盤信息

            smartctl -a /dev/sda 檢測(cè)所有信息

            2、獲取檢測(cè)信息

            # smartctl -H /dev/sda

            smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen

            Home page is http://smartmontools.sourceforge.net/

            SMART Health Status: OK

            關(guān)鍵的最后一行說(shuō)明磁盤的情況       截取  DISK_HEALTH=`smartctl -H /dev/sda | tail -1 | cut -d: -f2-  `

            3、 進(jìn)行關(guān)鍵判斷

            據(jù)我所知道的 smartctl 5.38  是出以上的結(jié)果 為OK

            而 smartctl 5.39 是出以下結(jié)果

            === START OF READ SMART DATA SECTION ===

            SMART overall-health self-assessment test result: PASSED

            關(guān)鍵詞是PASSED

            所以要分析判斷多種情況

            4、腳本編寫步驟

            1)了解nagios插件編寫規(guī)范

            Nagios的插件可以用腳本(shell、Perl)C編譯后的可執(zhí)行程序,但必須滿足以下兩件事:

            A、既出時(shí)有一個(gè)返回值

            B、至少向標(biāo)準(zhǔn)輸出設(shè)備(STDOUT)輸出一行文件。(但也不能太大,默認(rèn)是4K,如果想大些,修改源程序吧,方法搜。)

            返回值定義:

            Plugin Return Code Service State DISK State
            0 OK OK 或者PASSED
            1 WARNING 插件警告  DISK報(bào)警只分OK或者CRITICAL
            2 CRITICAL  DISK檢測(cè)非OK 或者PASSED
            3 UNKNOWN  未知狀態(tài)

            2)插件編寫SHELL速成法

            在這里我選用我最熟悉的SHELL進(jìn)行腳本編寫 ,

            我的速成法就是,直接去nagios exchange 去下比較成熟的比較簡(jiǎn)單的shell腳本,這樣會(huì)從一開(kāi)始借鑒別人好的方法,養(yǎng)成好的習(xí)慣,而且只要你有一點(diǎn)SHELL編程經(jīng)驗(yàn)也可以很快寫得像一個(gè)老手。(不過(guò)不要把自己搞暈了就行)

            3)以下是我的check_disk_health.sh

            #!/bin/bash
            # ========================================================================================
            # disk health  plugin for Nagios
            #
            # Written by    : Ajian
            # Release       : 1.2.0
            # Creation date : 2009-07-28
            # Revision date : 2009-07-30
            # Description   : Nagios plugin (script) to check disk health .
            #               This script has been designed and written on Linux System.
            #
            # USAGE         : ./check_disk_health.sh [-d (disk)]
            #
            # Exemple: ./check_cpu_stats.sh
            #          ./check_cpu_stats.sh -d /dev/sda
            #
            #
            # HISTORY :
            #     Release   |     Date      |    Authors            |       Description
            # --------------+---------------+----------------------+-----------------------------------
            #  1.0.0        | 2009-07-28     | Ajian                | Create the script
            #  1.2.0        | 2009-07-30    |  Ajian                | modify the script and run well ,fix a bug.
            # -----------------------------------------------------------------------------------------
            # NOTICE:
            #-----------------------------------------------------------------------------------------
            #     You should have the root Permissions ,You can use sudo to realize .
            # -----------------------------------------------------------------------------------------                                  
             
            # Nagios return codes
            #定義 nagios返回的狀態(tài)變量
            STATE_OK=0
            STATE_WARNING=1
            STATE_CRITICAL=2
            STATE_UNKNOWN=3     
             
            # Paths to commands used in this script.  These may have to be modified to match your system setup.
            # 定義關(guān)鍵的核心命令smartctl 路徑 如果你的系統(tǒng)不是這個(gè)地址,請(qǐng)更改。 以下注釋的是調(diào)試的信息,是自動(dòng)獲取命令路徑的方法。
            SMARTCTL="/usr/sbin/smartctl"
            #SMARTCTL=`which smartctl`
            #if [ $? -ne 0 ]; then
            #        echo " smartctl is found in $SMARTCTL ; Go on ... "
            #        echo "smartctl the command cannot find"
            #        exit $STATE_UNKNOWN
            #fi
            # Plugin parameters value if not define
            # 定義默認(rèn)的檢測(cè)硬盤
            CHECK_DISK="/dev/sda"                 
             
            # Plugin variable description
            # 插件描述信息
            PROGNAME=$(basename $0)
            RELEASE="Revision 1.2.0"
            AUTHOR="(c) 2009 Ajian ()"
             
            # Functions plugin usage
            # 插件的使用方法函數(shù)
            print_release() {
                echo "$RELEASE $AUTHOR"
            }                         
             
            print_usage() {
                    echo ""
                    echo "$PROGNAME $RELEASE - Disk health check script for Nagios"
                    echo ""
                    echo "Usage: check_disk_health.sh -d /dev/sdb"
                    echo ""
                    echo "  -d  the disk (/dev/sda) "
                    echo "          not the Hard disk partition(sda2 is wrong)"
                    echo "  -v  check the version"
                    echo "  -h  Show this page"
                    echo ""
                echo "Usage: $PROGNAME"
                echo "Usage: $PROGNAME --help"
                echo ""
                exit 0
            }                                                                                                         
             
            print_help() {
                    print_usage
                    echo ""
                    echo "This plugin will check disk health  "
                    echo ""
                    exit 0
            }                                                 
             
            # Parse parameters
            # 傳遞參數(shù)
            while [ $# -gt 0 ]; do
                case "$1" in
                    -h | --help)
                        print_help
                        exit $STATE_OK
                        ;;
                    -v | --version)
                            print_release
                            exit $STATE_OK
                            ;;
                    -d | --disk)
                            shift
                            CHECK_DISK=$1
                            #判斷磁盤是否存在
                            if [ ! -b $CHECK_DISK ];then
                                    echo "$CHECK_DISK is no exsit,Please change it "
                                    exit $STATE_CRITICAL
                            fi
                            ;;
                    *)  echo "Unknown argument: $1"
                        print_usage
                        exit $STATE_UNKNOWN
                        ;;
                    esac
            shift
            done
             
            #根據(jù)不同的操作進(jìn)行不同的操作,這里暫時(shí)只支持Linux
            case `uname` in
                    Linux )
                         #最核心的部分 前面都是些腳本的基本功能 一個(gè)框架 因?yàn)榈谝粋€(gè)腳本牽扯到了很多東西,雖然功能很簡(jiǎn)單,
                         #但折騰了我不少,在后面的分析中會(huì)具體說(shuō)到 總之注意sudo用法 腳本一開(kāi)始就有說(shuō)哦
                            DISK_HEALTH=`$SMARTCTL  -H $CHECK_DISK | tail -1 | cut -d: -f2- `
                            #DISK_HEALTH="OK"
                    #       DISK_INFO=`/usr/bin/sudo $SMARTCTL -i $CHECK_DISK | grep "Device:"`
                            if [ "$DISK_HEALTH" = " OK" ]|| [  "$DISK_HEALTH" = " PASSED" ];then
                                    echo "OK - $CHECK_DISK status is $DISK_HEALTH "
                                    #echo "OK - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                                    exit $STATE_OK
                            else
                                    echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH "
                                    #echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                                    exit $STATE_CRITICAL
                    fi
                        ;;
             
                    *)              echo "UNKNOWN: `uname` not yet supported by this plugin. Coming soon !"
                                    exit $STATE_UNKNOWN
                        ;;
                    esac4)運(yùn)行腳本

            (注意:在最開(kāi)始自己寫的腳本是沒(méi)有sudo的,以上腳本是已經(jīng)調(diào)試過(guò)后的,還需要配置一些其它的東西,慢慢看吧)
            給與腳本執(zhí)行權(quán)限,手動(dòng)執(zhí)行

            # ./check_disk_health.sh
            OK – /dev/sda status is  OK

            結(jié)果正確了,其實(shí)這個(gè)時(shí)候,高興得太早了。 我先不說(shuō)問(wèn)題、繼續(xù)正常的一般流程。

            5、配置Nagios 調(diào)用插件

            1)在遠(yuǎn)程N(yùn)RPE 被監(jiān)控服務(wù)器上修改nrpe.conf
            # vim /usr/local/nagios/etc/nrpe.cfg
            添加 command[check_sda_health]=/usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda
            (注意這里了,先提醒下,這里是錯(cuò)誤的,一般是正確的,是這個(gè)腳本的特殊性造成的)

            2)在Nagios 監(jiān)控服務(wù)器上添加一些配置

            定義服務(wù)

            define service{
            use                             Disk-Health
            host_name                       DB-56
            servicegroups                   Disk-Health
            service_description            check sda disk health
            contact_groups                  admins
            check_command               check_nrpe!check_sda_health
            }
            如果像上面定義一個(gè)服務(wù) 那么就要注意相關(guān)的定義了 ,
            定義Disk-Health 模版  把硬盤檢測(cè)定義一個(gè)模版會(huì)比較好控制,因?yàn)橛脖P的檢測(cè)不像其它服務(wù)一樣需要準(zhǔn)確的及時(shí)性反正檢測(cè)得太多可能會(huì)造成壓力,一般一天檢測(cè)幾次就夠了。
            定義DB-56 主機(jī)需要定義
            定義組 admins
            以上這些只要安裝過(guò)nagios 一般都知道的了 只是強(qiáng)調(diào)下模版的單獨(dú)定義

            3)通過(guò)WEB控制檢測(cè) 查看結(jié)果

            結(jié)果是失敗 報(bào)警CRITCTL 但是狀態(tài)里面的信息都是空的  CRITCTL – /dev/sda status is

            6、調(diào)試

            從Nagios的遠(yuǎn)程監(jiān)控來(lái)看是失敗的,并且沒(méi)有獲取到任務(wù)有用的信息。

            分析可以看到,說(shuō)明nrpe調(diào)用  這個(gè)變量獲取到的是為空的信息
            DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
            即是空的 只有一個(gè)原因,肯定是沒(méi)有執(zhí)行 如果執(zhí)行了 肯定會(huì)有字段 不管這個(gè)字段是否相符。
            但是手動(dòng)執(zhí)行是沒(méi)有問(wèn)題。
            經(jīng)過(guò)對(duì)smartctl的查看 原來(lái)這個(gè)命令是只允許root進(jìn)行調(diào)用的。
            現(xiàn)在需要解決的問(wèn)題是:非root 用戶 如何遠(yuǎn)程調(diào)用含有需要有root權(quán)限命令的腳本進(jìn)行監(jiān)控。
            (不要小看這一句話,每一個(gè)詞都是一個(gè)需要攻克的地方)
            以下是調(diào)試步驟:
            1)非root用戶
            NRPE插件是用nagios這個(gè)用戶來(lái)執(zhí)行的 所以要得到真實(shí)的情況需要
            A: su nagios   再執(zhí)行腳本 (這個(gè)方法比較好)
            B: sudo -u nagios ./check_disk_health.sh
            結(jié)果:

            sudo -u nagios ./check_disk_health.sh
            CRITICAL – /dev/sda status is
            跟遠(yuǎn)程的結(jié)果是一樣的了 沒(méi)有信息
            2)需要有root權(quán)限
            需要root權(quán)限只有一個(gè)辦法就是用sudo
            將DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
            改為DISK_HEALTH=`/usr/bin/sudo $SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
            (最后發(fā)現(xiàn)這時(shí)加sudo 并不是關(guān)鍵 關(guān)鍵是很行腳本時(shí)用sudo )
            結(jié)果:sudo -u nagios ./check_disk_health.sh
            Password:
            需要輸入密碼  sudo不用輸入密碼的方法
            修改sudo配置文件
            執(zhí)行 visudo
            添加
            nagios ALL=(ALL) NOPASSWD:/usr/local/nagios/libexec/check_disk_health.sh
            建議:最好進(jìn)行sudo的一些控制,很多網(wǎng)方法就是nagios ALL=NOPASSWD:ALL
            結(jié)果:
            su nagios
            /usr/bin/sudo check_disk_health.sh
            OK – /dev/sda status is OK
            那么在nrpe.conf配置文件中需要添加sudo
            command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh
            最開(kāi)始那個(gè)是錯(cuò)誤的 注意啊 這個(gè)是需要添加/usr/bin/sudo 就是說(shuō)只要腳本中涉及到提升到root權(quán)限的命令那么就要用這個(gè)
            3)遠(yuǎn)程調(diào)用
            遠(yuǎn)程調(diào)用方法:./check_nrpe -H 192.168.0.56 -c check_sda_health
            同上如果想模擬真實(shí)環(huán)境請(qǐng)切換到相應(yīng)的執(zhí)行用戶 su nagios 再執(zhí)行以上操作
            結(jié)果:   NRPE: Unable to read output
            這個(gè)錯(cuò)誤的原因一定要明白,之所以報(bào)這個(gè)錯(cuò)意思是說(shuō)NRPE沒(méi)有獲取到任何信息,也說(shuō)是寫腳本之前說(shuō)的其中第二條規(guī)范
            問(wèn)題:在沒(méi)有任何信息的情況下怎么來(lái)獲取NRPE執(zhí)行的日志呢
            就是要確定問(wèn)題在哪,經(jīng)過(guò)一大番的查找眼睛偶爾看到一個(gè)有趣的小方法
            修復(fù)nrpe.conf配置文件 在要檢查的命令后面添加>>/tmp/output 2>&1 將錯(cuò)誤導(dǎo)出到文件中進(jìn)行查看
            command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda >>/tmp/output 2>&1
            重記nrpe服務(wù)
            遠(yuǎn)程調(diào)用 結(jié)果當(dāng)然還是NRPE: Unable to read output
            查看/tmp/output
            sudo: sorry, you must have a tty to run sudo
            有錯(cuò)誤就簡(jiǎn)單了  原來(lái)這個(gè)是默認(rèn)不允許sudo 在后端進(jìn)行
            visudo
            注釋Defaults requiretty 就OK了
            結(jié)果通過(guò)WEB查看也正確了。
            (注意:注釋后 檢測(cè)仍然會(huì)是Unable 不過(guò)看/tmp/output就會(huì)有正確的結(jié)果,所以有正確的結(jié)果后,一定要去掉 >>/tmp/outpt 2>&1 信息都導(dǎo)到文件中了 nagios還是得不到任何消息。)

            一個(gè)腳本執(zhí)行成功后,就是大批量應(yīng)用,用生產(chǎn)環(huán)境驗(yàn)證,出現(xiàn)問(wèn)題繼續(xù)調(diào)試。

            以上為所有的分析調(diào)試方法。如果你看到最后一步了,說(shuō)明你很有耐心,你也一定會(huì)成功的,至于寫得好與壞、對(duì)與錯(cuò)請(qǐng)盡管說(shuō),這不會(huì)影響你的成功。呵呵。
            轉(zhuǎn)自:
            http://blog.chinaunix.net/uid-20592013-id-2436813.html
            posted @ 2013-09-03 09:39 小果子 閱讀(1408) | 評(píng)論 (0)編輯 收藏
                 摘要: 一、Nagios簡(jiǎn)介   Nagios是一款開(kāi)源的電腦系統(tǒng)和網(wǎng)絡(luò)監(jiān)視工具,能有效監(jiān)控Windows、Linux和Unix的主機(jī)狀態(tài),交換機(jī)路由器等網(wǎng)絡(luò)設(shè)置,打印機(jī)等。在系統(tǒng)或服務(wù)狀態(tài)異常時(shí)發(fā)出郵件或短信報(bào)警第一時(shí)間通知網(wǎng)站運(yùn)維人員,在狀態(tài)恢復(fù)后發(fā)出正常的郵件或短信通知。   Nagios原名為NetSaint,由Ethan Galstad開(kāi)發(fā)并維護(hù)至今。NAGIOS是一個(gè)縮寫形式: "Nagio...  閱讀全文
            posted @ 2013-09-02 14:26 小果子 閱讀(647) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題  下一頁(yè)
            精品久久久久久| 欧美久久一级内射wwwwww.| 欧美伊人久久大香线蕉综合| 久久亚洲精品成人AV| 伊人色综合久久天天| 久久久久久A亚洲欧洲AV冫| 久久综合九色综合久99| 久久久国产精华液| 久久久精品一区二区三区| 久久中文精品无码中文字幕| 伊人久久大香线蕉av不卡| 久久久久久久99精品免费观看| 久久精品无码一区二区三区日韩| 尹人香蕉久久99天天拍| 国产∨亚洲V天堂无码久久久 | 国产亚洲精久久久久久无码| 99久久国产亚洲高清观看2024| 欧美午夜A∨大片久久 | 中文字幕亚洲综合久久2| 伊人久久大香线蕉综合热线| 久久er国产精品免费观看2| 国产精品无码久久综合网| 99久久精品免费看国产免费| 亚洲欧美伊人久久综合一区二区| 精品久久久久久无码中文字幕 | 99久久国产综合精品麻豆| 99久久国产亚洲综合精品| 国产69精品久久久久9999| 66精品综合久久久久久久| 国产成人综合久久综合| 精品久久久久久无码中文野结衣 | 久久se精品一区二区| 亚洲伊人久久综合中文成人网| 中文精品久久久久国产网址| 99久久中文字幕| 久久婷婷综合中文字幕| 久久久久久免费一区二区三区| 久久久青草青青亚洲国产免观| 久久久无码人妻精品无码| 国产精品对白刺激久久久| 久久99亚洲网美利坚合众国|