存档

作者存档

要学会淡定(转贴)

2010年6月21日 John.Lv 1 条评论

淡定,是内在心态的修炼到一定程度所呈现出来的那种从容、优雅的感觉。

淡定,是一种思想境界,是一种心态,是生活的一种状态。我们每个人都需要这种心态,在生活中才会处之泰然,宠辱不惊,不会太过兴奋而忘乎所以,也不是太过悲伤而痛不欲生。

淡定与平庸的人的区别是什么。

平庸的人没有太大的能力,只是很平凡地生活着。

而淡定则代表一种生活态度。

淡定的人有能力去争取自己想要的一切,然而他却看淡这一切。

只是固守着自己所谓的幸福,与世无争地生活着,简单的快乐。

————这个世界越来越快,要做到从容淡定…..

 

    速度越来越快的世界,人的节律也变得越来越快。开车要快,不快就堵在路上了;上升要快,不快就老了;成名要快,不快就过期了;积累财富要快,不快就成穷人了;电脑的运行速度更是要快而又快,CPU要快,光驱倍速更要快……有什么要慢下来的事情没有?
从容淡定已经是一种奢望,一种难以达到的大境界。
    在现代都市竞争的人性丛林,能够修炼成从容淡定应该是一种福气。
    为什么不从容呢?你以为天要塌下来的事情,对于天来说,其实根本就塌不下来。同事的倾轧,业绩的失败,人际的纠纷,老板的冷遇,看起来都好像火烧眉毛的事,看起来都好像令人忧心忡忡的事,如果放在历史的长河中,放在宇宙的时空中,放在一个人一辈子漫长的遭遇中,都算不得什么大不了的事。即使像被降职、被解雇这样的重创,如果心理上有准备,如果财富上有准备,又何尝不是一次人生的转折、转机、转型?当然,如果你的时间资源、财富资源都已经被耗尽,那就另当别论——你就确实需要从头苦干,但也并不意味着不可以把自己的心情调剂得好一点、更好一点,也有利于自己的身体健康。
    没有不从容淡定的理由。野心、嫉妒、欲望,都是毁灭从容淡定的毒药,都是把人驱入焦躁疲惫深渊的猛兽。职场小人们大可以阴谋诡计,大可以机关算尽,大可以急火攻心,大可以造谣生事,大可以挑拨离间,但是你也大可以“正常心态,平稳动作”,不为所动,不上套,从容淡定,自信那些职场小人们“捣鬼有术,也有限”。
    从容淡定——你从容淡定,才可能更好地工作,更好地创造,更好地提高自己,修炼自己。从某种意义上来说,被阴谋诡计搞掉的好人虽然也不少,但是被阴谋诡计搞掉的有毛病的好人更多,被阴谋诡计互相吞噬的恶人坏人当然更多。从某种意义上来说,从容淡定是“聚精会神搞建设,一心一意谋发展”的另一种说法,是修身养性的必由之路。你从容淡定了,才能在业务上有长进,才能致力于自己的提高发展,而不是算计别人,嫉妒别人,诋毁别人乃至陷害别人。像在赛跑中,跑得过别人固然好,跑不过别人就努力锻炼,争取在速度和耐力上超越别人,如果经过了大努力,资质上确实与别人有很大差距,那也得潇洒地承认差距。从容淡定就是跑得过就跑,跑不过也决不使绊子,搞小动作,喝违禁药,为了那个“正面看是荣誉与义务,反面看是浮名虚利”的奖杯,而在职场赛跑中卑劣地使绊子,搞小动作,喝违禁药,把自己的人格降低到作弊者、造假者、撒谎者、骗子手的层次,是得不偿失的愚行——何况这样做也有露馅的时候,也有被揭露、被捉拿的时候,一如本·约翰逊丑闻一样。

从容淡定,意味着冷静的现实主义。对世界、社会和他人,不抱过高的期望。知道正义也可能常常迟到,公正永远是相对的,永远没有完美的现实,有的只是庸碌凡俗的世人,以及随时可能会裂变霉变的脆弱人性……有了这种冷静的态度,遇到不公正、遇到误解、遇到委屈,就不会伤心,就不会怨天尤人,更不会自怨自艾,而是咬紧牙关,苦炼内功,“面壁十年图破壁”,等待和寻找胜出的机会。
从容淡定,意味着有所抗争有所不争,有所为有所不为。凡有利于社会、有利于个人长远建设的事,就努力做,排除干扰地做;而不利于社会、不利于个人长远建设的事,就尽量不做,少做。
    从容淡定,意味着“三不较劲”原则,“不与天较劲,不与人较劲,不与事较劲”。不较劲,不意味着对待社会邪恶、社会腐败、职场小人的咄咄逼人就退避三舍,而是要选择最有策略的方法,达到最大的效果。
    从容淡定,意味着在大多数时候应该保持好心情,“谦虚谨慎,戒骄戒躁”。意味着自己还有更广阔的境界,更宏大的作为,而在事业之余,对美好的事物有更好的鉴赏力,看一片大好的自然景色,看一张艺术水平高的影碟,都可以调剂好从容淡定的气度与心情。
    有一则故事好像在嘲笑傻人,我倒觉得可以推陈出新:“下雨了,大家都在往前跑,惟有一人不急不慢,在雨中踱步。有人问:‘干吗不跑?’回答是:‘急什么,前面也下着雨呢!’”

 

转贴自:http://hi.baidu.com/%C6%DF%D0%ED%CB%AE%CF%C9%BB%A8/blog/item/166836a998af16f61e17a2a6.html

分类: Notes, 生活随笔 标签:

Mochi 中国开发者大赛

2010年6月8日 John.Lv 1 条评论

    Mochi中国和盛大游戏将于6月召开首届麻球开发者大赛,面向中国的Flash游戏开发者征集最有价值的作品,冠军奖金10万,总奖金共计21万。据可靠消息透露由于本次麻球开发者大赛是第一届,为了保证其长久性,为了吸引更多开发者,本次大赛绝对是公正、公平的!请感兴趣的牛人们不要错失良机哟!

Solaris使用ndd排除网卡故障

2008年9月19日 John.Lv 没有评论

测试硬件:Sun V480&Sun V880
测试环境: Solaris 10 11/06 s10s_u3wos_10 SPARC
故障描述:网络不通或者瞬断后自动恢复
故障检查:排除网络问题,排除网卡、交换机硬件问题后,通过查看错误日志找到问题
# more /var/adm/messages |grep -i warning 或者dmesg |grep -i warning
log样本如下:

下载: code.txt
Sep 18 18:31:20 DBSERVER2 genunix: [ID 408789 kern.warning] WARNING: ce1: fault detected external to device; service degraded
Sep 18 18:31:20 DBSERVER2 genunix: [ID 451854 kern.warning] WARNING: ce1: xcvr addr:0x01 - link down
Sep 18 18:31:20 DBSERVER2 in.routed[135]: [ID 238047 daemon.warning] interface ce1 to 192.168.100.60 turned off
Sep 18 18:31:20 DBSERVER2 in.routed[135]: [ID 238047 daemon.warning] interface ce1 to 192.168.100.60 restored

一般超成该故障可能原因为:网卡的参数设置问题
查看网卡参数
ndd -get /dev/ce ?
可以查看和设置的参数如下:

下载: code.txt
instance                      (read and write)
adv_autoneg_cap               (read and write)
adv_1000fdx_cap               (read and write)
adv_1000hdx_cap               (read and write)
adv_100T4_cap                 (read and write)
adv_100fdx_cap                (read and write)
adv_100hdx_cap                (read and write)
adv_10fdx_cap                 (read and write)
adv_10hdx_cap                 (read and write)
adv_asmpause_cap              (read and write)
adv_pause_cap                 (read and write)
master_cfg_enable             (read and write)
master_cfg_value              (read and write)
use_int_xcvr                  (read and write)
enable_ipg0                   (read and write)
ipg0                          (read and write)
ipg1                          (read and write)
ipg2                          (read and write)
rx_intr_pkts                  (read and write)
rx_intr_time                  (read and write)
red_dv4to6k                   (read and write)
red_dv6to8k                   (read and write)
red_dv8to10k                  (read and write)
red_dv10to12k                 (read and write)
tx_dma_weight                 (read and write)
rx_dma_weight                 (read and write)
infinite_burst                (read and write)
disable_64bit                 (read and write)
accept_jumbo                  (read and write)

查看网卡的自适应设置:ndd -get /dev/ce adv_autoneg_cap
显示为:0(禁用)
查看adv_1000fdx_cap:ndd -get /dev/ce adv_1000fdx_cap
显示为:1,启用
ok,网卡是支持千兆的,但是交换机是百兆的,而网卡的配置没有启用自适应,造成了该故障
解决方法:修改相关配置
vi /platform/sun4u/kernel/drv/ce.conf 参考如下配置:

下载: code.txt
# ce.conf
# GigaSwift (ce) driver configuration file
# Copyright (c) 2000 by Sun Microsystems, Inc.
# All rights reserved.
#
#ident  "@(#)ce.conf      1.0.5     041110 SMI ES-PTS-NET/Lor"
#
############################################
# This file is not needed for most installations !
#
# It MAY be needed for rare special customizations. In this case,
# copy the file and edit the following example to suit your needs.
############################################
#
# Depending on your changes, this file overwrites the Sun[TM] recommended
# default values (To use the default values, you do not need this file).
# In particular, Sun's[TM] recommendation is to leave Ethernet Auto-negotiation
# ON at both link partners (this is the default). See Product Documentation and
# SunSolve Infodocs 41665, 72033 for proper use first.
#
# Most parameters must be set on both sides to have effect
# (e.g check also switch and remote partner(s) settings).
#
# To install:
# 1) On SPARC systems, copy ce.conf to /platform/sun4u/kernel/drv/ce.conf
#    On x86 Opteron systems, copy ce.conf to /kernel/drv/ce.conf
# 2) edit file to your needs. Default is to do nothing.
# 3) reboot the system
#
# For settings per interface, name, parent and unit-address
# must be specified. Obtain the hardware path from /etc/driver_aliases and
# /etc/path_to_inst as shown below (unit-address is NOT the instance !) :
#
# % grep ce /etc/driver_aliases
# ce "pci108e,abba"
#           |                       % grep ce /etc/path_to_inst
#           |                       "/pci@21c,700000/pci@1/network@0" 0 "ce"
#           |                               |                      |
#           V                               V                      V
# name="pci108e,abba" parent="/pci@21c,700000/pci@1" unit-address="0"
#
# after this, append the settings you want.
# Repeat for each interface to be configured. All other will be default.
# Don't forget the ";" after each section. Hardware path examples:
#
# name="pci108e,abba" parent="/pci@21c,700000/pci@1" unit-address="0"
# (GigaSwift NIC in Sun Fire 15000 hsPCI Board IO 16 PCI Slot 1)
#
# name="pci100b,35" parent="/pci@9,600000/pci@2/pci@0" unit-address="1"
# (2nd port of QGE NIC in Sun Fire V880 PCI Slot 7)
#
 name="pci108e,abba" parent="/pci@9,700000" unit-address="2" ;
 name="pci108e,abba" parent="/pci@9,600000" unit-address="1" ;
# (V480R onboard interfaces)
#
# For global settings, no hardware path needs to
# be specified, the settings are used for all ce interfaces.
############################################
#
# Select hardware path (not needed if all interfaces set the same)
#name="" parent="" unit-address=""
#
# example: forced 1000 Mbit/s, 802.3x Flow Control send and receive
# Speed/Mode values, set the desired to 1, all other to 0:
adv_1000fdx_cap=0
adv_1000hdx_cap=0
adv_100fdx_cap=0
adv_100T4_cap=0
adv_100hdx_cap=0
adv_10fdx_cap=0
adv_10hdx_cap=0
#
# Enable Ethernet Flow Control
#adv_asmpause_cap=0
#adv_pause_cap=1
#
# Clock Master values, change in forced 1000 Mbit/s back-to-back config only:
#master_cfg_enable=1 # enable usage of master_cfg_value (ce >1.118)
#master_cfg_value=0 # one link partner 1, the other 0 (ce >1.118)
#
# Advertize values above per Auto-negotiation.
# Should be set to 1 in most cases, 0 disables Auto-negotiation
adv_autoneg_cap=1
#
#
# Enable Jumbo Frames
#accept-jumbo=1
;

上面的;表示结束不是多余的哦
更新ce.conf
update_drv -f ce
ok,再次查看系统日志后发现问题消失!

分类: Solaris 标签:

VBS-自动重启OS(多台)

2008年9月11日 John.Lv 1 条评论

Windows的环境如果你没有使用域环境那么在维护时如何重启多台服务器的系统呢?安装cygwin,然后用shell脚本重启,哦不,太麻烦了,而且多了一个cygwin的故障点。使用VBS最方便。
需要的东东有:Windows的ODBC,Mysql或者SQL Sever,VBS脚本一个
配置步骤:
1.MySql/SQL Sever建一张表,表名hosts,表的内容包括ip,username,passwd并且输入相应信息,如图:

如果不需要重启的server用#注释,如上图
2.配置ODBC
控制面板->管理工具->数据源 (ODBC)->系统DSN中如图添加:

3.将下面的VBS保存执行即可

下载: code.txt
On Error Resume Next
'Write by john.lv
'e-mail:lvming104@hotmail.com
'if you have any questions, please contact me.
'get date
  mydate=now
  my_day = day(mydate)
  my_month = month(mydate)
  my_year=year(mydate)
my_date = my_year &  my_month & my_day

'读取磁盘驱动器
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.DriveExists("d:\")="True" then
getfso=fso.GetDrive("d:")
else
getfso=fso.GetDrive("e:")
end if

'判断log文件夹是否存在
if fso.folderExists(getfso&"\log")=Flase then
fso.CreateFolder(getfso&"\log")
end if

'判断reboot.log是否存在,保存在d:\log\或者e:\log\下
if fso.fileExists(getfso&"\log\reboot_"&my_date&".log")=Flase then
fso.CreateTextFile(getfso&"\log\reboot_"&my_date&".log")
set objNF=fso.OpenTextFile(getfso&"\log\reboot_"&my_date&".log",8)
'打开reboot_my_date.log文件
else
set objNF=fso.OpenTextFile(getfso&"\log\reboot_"&my_date&".log",8)
end if

'读取数据库密码
set objshell=CreateObject("WScript.Shell")
Input1 = InputBox("请输入重启服务器所需密码","身份验证")
'判断是否为空
if input1="" then
wscript.quit
else
checksum=input1
end if

Set objFSO = CreateObject("Scripting.FileSystemObject")
set objlocator=createobject("wbemscripting.swbemlocator")
Const SHUTDOWN = 1

'定义链接数据库信息
hosts="DSN=syslog;uid=syslog;pwd="&checksum
'uid登录数据库的用户名,pwd:密码
Set DbConn = CreateObject("ADODB.Connection")
DbConn.Open hosts

'记log
if CStr(Err.Number)<>"0" then
objNF.writeline "Error No:" & CStr(Err.Number) & " " & Err.Description
objNF.writeline ""
msgbox "Error No:" & CStr(Err.Number) & " " & Err.Description
wscript.quit
end if
'读取hosts中主机信息,去掉以#开头的
SQL="select ip,username,passwd from hosts where ip not like '#%'"
Set Rs=DbConn.execute(SQL)
if not(Rs.eof) Then
do while not Rs.eof
strComputer=rs(0)
username=rs(1)
password=rs(2)

'远程通过username,password连接服务器(WMI)
Set objWMIService = objlocator.connectserver(strComputer ,"root\cimv2",username,password)

'记log
if CStr(Err.Number)<>"0" then
'msgbox (strComputer&" Error No:" & CStr(Err.Number) & " " & Err.Description)
objNF.writeline "ip:"&strComputer&" Error No:" & CStr(Err.Number) & " " & Err.Description
objNF.writeline ""
else
 Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")
  For Each objOperatingSystem in colOperatingSystems
    ObjOperatingSystem.Reboot()  '重启
   Next

'记log
 if  CStr(Err.Number) ="0" then
  objNF.writeline "ip:"&strComputer&"  重启时间:"&now
  objNF.writeline ""
  else
  objNF.writeline "ip:"&strComputer&" Error No:" & CStr(Err.Number) & " " & Err.Description
  objNF.writeline ""
  end if
 End if
'下移一条记录
rs.movenext
loop

objNF.close
'提示重启结果
if CStr(Err.Number)="0" then
msgbox "重启完成" '提示重启完成
else
msgbox ("Error No:" & CStr(Err.Number) & " 重启没有完成" )
end if

else
wscript.echo "没有查到host信息,请重新确认"
End if

Err.Clear '清除错误。

运行脚本时会出现如下图的提示框:(这样要求输入的是数据库的登录密码)

重启的log记录在d:\log\reboot_date.log或者e:\log\reboot_date.log
log范例如下:

下载: code.txt
Error No:-2147217843 [Microsoft][ODBC SQL Server Driver][SQL Server]用户 'syslog' 登录失败。
#表示在提示框输入的数据库密码错误
ip:192.168.1.50 Error No:-2147023174 RPC 服务器不可用。
#ip地址错误或服务器无法连接
ip:192.168.100.100 Error No:-2147024891 拒绝访问。
#用户名或密码错误
ip:192.168.100.102  重启时间:2008-9-11 12:06:09
#重启成功并记录时间

ok,大功告成。

分类: VBS 标签:

命令行实现ftp断点续传(Windows)

2008年9月9日 John.Lv 没有评论

由于经常通过命令行ftp下载一些数据,但往往因为网络不好,造成数据无法完成下载,只能断点续传。
一般采用ftp的reget命令或者是wget -c,由于本人没有ftp带reget这个命令,只能使用wget,使用下来效果还不错!
使用命令:wget
下载地址:wget for windows
命令格式:wget -c ftp://username:passwd@192.168.1.1/query/*.zip

用法: wget [选项]… [URL]…
详细说明:

下载: code.txt
启动:
-V, –version显示Wget的版本并且离开.
-h, –help显示这个说明档.
-b, -background在启动之後跳到背景去.
-e, -execute=COMMAND执行一个`.wgetrc’里面的COMMAND指令.
纪录档与输入的档案:
-o, –output-file=FILE纪录讯息到FILE去.
-a, -append-output=FILE增加讯息到FILE去.
-d, –debug显示除错的输出.
-q, –quiet安静模式(不输入任何讯息).
-v, –verbose冗长模式(这是内定值).
-nv, –non-verbose关闭verboseness,但不是安静模式.
-i, –input-file=FILE从FILE读取URL .
-F, –force-html把输入的档案当作HTML.
下载: code.txt
下载:
-t, –tries=NUMBER设定重复尝试NUMBER次(0是无限制).
-O –output-document=FILE把文件写到FILE里.
-nc, –no-clobber不破坏已经存在的档案.
-c, –continue重新取得一个已经存在的档案.
–dot-style=STYLE设定取回状况的显示风格.
-N, –timestamping不取回比本地旧的档案.
-S, –server-response显示伺服器回应状况.
–spider不下载任何东西.
-T, –timeout=SECONDS设定读取时超过的时间为SECONDS秒.
-w, –wait=SECONDS在取回档案时等待SECONDS秒.
-Y, –proxy=on/off开启或关闭Proxy.
-Q, –quota=NUMBER设定取回档案的定额限制为NUMBER个.
下载: code.txt
目录:
-nd –no-directories不建立目录.
-x, –force-directories强制进行目录建立的工作.
-nH, –no-host-directories不建立主机的目录.
-P, –directory-prefix=PREFIX把档案存到PREFIX/…
–cut-dirs=NUMBER忽略NUMBER个远端的目录元件.
下载: code.txt
HTTP选项:
– [http-user=USER设http使用者为USER.]
– [http0passwd=PASS设http使用者的密码为PASS.]
-C, –cache=on/off提供/关闭快取伺服器资料(正常情况为提供).
–ignore-length忽略`Content-Length’标头栏位.
–proxy-user=USER设USER为Proxy使用者名称.
–proxy-passwd=PASS设PASS为Proxy密码.
-s, –save-headers储孠[HTTP标头成为档案.]
-U, –user-agent=AGENT使用AGENT取代Wget/VERSION作为识别代号.
下载: code.txt
FTP选项:
–retr-symlinks取回FTP的象徵连结.
-g, –glob=on/off turn file name globbing on ot off.
–passive-ftp使用”passive”传输模式.
下载: code.txt
使用递回方式的取回:
-r, –recursive递归–请小心使用!.
-l, –level=NUMBER递回层次的最大值(0不限制).
–delete-after删除下载完毕的档案.
-k, –convert-links改变没有关连的连结成为有关连.
-m, –mirror开启适合用来映射的选项.
-nr, –dont-remove-listing不要移除`.listing’档.
下载: code.txt
递回式作业的允许与拒绝选项:
-A, –accept=LIST允许的扩充项目的列表.
-R, –reject=LIST拒绝的扩充项目的列表.
-D, –domains=LIST允许的网域列表.
–exclude-domains=LIST拒绝的网域列表(使用逗号来分隔).
-L, –relative只跟随关联连结前进.
–follow-ftp跟随HTML文件里面的FTP连结.
-H, –span-hosts当开始递回时便到外面的主机.

expect实现ssh自动交互

2008年9月4日 John.Lv 1 条评论

由于最近刚接手一批oracle数据库服务器,只能使用指定用户oracle进行相关操作。而且ssh没有做public key,并且也没有权限做ssh的public key,使用shell脚本居然问我一次又一次的要密码,怎么脚本自动化?没办法,只能使用expect来实现了。
一般使用ssh的public key的ssh脚本如下:

下载: code.txt
#!/bin/sh
servers=`cat /etc/hosts | grep -v ^# | grep ^192.168.1 | cut -f1`
username="oracle"
echo exec cmd all...
for server in $servers; do
        echo "##########################################"
        echo $server
        ssh  $username@$server $1
        echo "##########################################"
done
wait
echo complete!

上面是shell脚本,这里就不多解释了,相信大家都能看明白。$1可以是运行命令也可以执行脚本,随便你,只要你喜欢!
如果不允许或者没有权限使用ssh的public key,那么只能使用expect进行ssh自动交互了

下载: code.txt
#!/usr/bin/expect
set username "oracle"
#ssh的用户名
set passwd "oracle11"
#ssh的密码
set servers [exec cat /etc/hosts | grep -v ^# | grep ^192.168.1 | cut -f1]
#读取hosts中要访问的主机
foreach server $servers {
#循环
spawn ssh $username@$server "[lindex $argv 0]";
#执行ssh,注意expect中输入的第一个变量用$argv 0表示。
expect "*password: ";
sleep .1;
send "$passwd\r";
#当出现提示输入密码时,自动输入密码
interact;
}

ok,这样指定的一般用户在ssh且不能使用key时就不用一次次输入密码了。

分类: shell 标签:

Cacti实现短信报警

2008年8月25日 John.Lv 8 条评论

一、 软件环境:cacti(需Threshold插件),飞信机器人(fetion)
二、 安装过程:
Cacti的Threshold插件下载及安装配置参见:Cacti配置e-mail报警
飞信机器人(fetion)下载及安装配置参见:系统监控:linux命令行-飞信客户端发送免费报警短信
三、 配置过程:
1.按照Cacti配置e-mail报警配置并启用thold
2.编辑cacti/plugins/thold/thold-functions.php
在thold–functions.php查找thold_mail($global_alert_address, ”, $subject, $msg, $file_array);行在此行下面加入:

下载: code.txt
exec("echo $subject >>/var/www/html/cacti/plugins/thold/alter.log");
exec("/var/www/html/cacti/plugins/thold/sendsms.sh");

查找 thold_mail($item["notify_extra"], ”, $subject,
$msg, $file_array);行在此行下面加入:

下载: code.txt
exec("echo $subject >>/var/www/html/cacti/plugins/thold/alter.log"); #将报警信息记录到alter.log
exec("/var/www/html/cacti/plugins/thold/sendsms.sh"); #执行sendsms.sh

备注:本人的thold安装在/var/www/html/cacti/plugins/thold/目录中,如果注释掉thold_mail,只通过短信发送报警。不注释掉thold_mail,会通过email和短信同时发送报警

thold-functions.php生成的alter.log范例如下:

下载: code.txt
192.168.1.207 - Used Space - G: Label: [hdd_percent] is still above threshold of 85 with 99

编写脚本sendsms.sh自动调用飞信机器人发送报警

下载: code.txt
#!/bin/sh
#send sms by fetion
#Write by John.Lv
if [ ! -e "/var/www/html/cacti/plugins/thold/alert.log" ];then #判断alter.log是否存在
echo "Usage:alert.log does not exist"
exit
fi
if [ -n "`cat /var/www/html/cacti/plugins/thold/alert.log`" ]; then #判断alter.log是否有报警信息
admin="135xxxxxxxx"  #短信接收人,需在你飞信的好友列表中
echo "sms $admin "`cat /var/www/html/cacti/plugins/thold/alert.log` >>/var/www/html/cacti/plugins/thold/sms.txt #发送alter.log中的报警信息给admin
echo "exit" >> /var/www/html/cacti/plugins/thold/sms.txt #退出飞信
else
echo "Usage:no alert"
exit
fi
if [ -n "`cat /var/www/html/cacti/plugins/thold/sms.txt`" ] ; then
/var/www/html/cacti/plugins/thold/install/fetion -u 13512345678 -p "123456" -b /var/www/html/cacti/plugins/thold/sms.txt  -EN
#调用fetion发送短信,命令格式和参数说明参见:系统监控:linux命令行-飞信客户端发送免费报警短信
rm -f /var/www/html/cacti/plugins/thold/sms.txt 1>/dev/null 2>&1
rm -f /var/www/html/cacti/plugins/thold/alert.log 1>/dev/null 2>&1
else
echo "Usgae:no message to send"
exit
fi

ok,配置完成了,现在就可以通过短信接收报警信息了

Cacti实现MSN报警

2008年8月22日 John.Lv 7 条评论

一、 软件环境:cacti(需Threshold插件),MSN机器人(SendMsg)
二、 安装过程:
Cacti的Threshold插件参见:Cacti配置e-mail报警
MSN机器人(SendMsg)参见:系统监控:msn在线机器人实时报警
三、 配置过程:
1.按照Cacti配置e-mail报警配置并启用thold
2.编辑cacti/plugins/thold/thold-functions.php
在thold–functions.php查找thold_mail($global_alert_address, ”, $subject, $msg, $file_array);行在此行下面加入:

下载: code.txt
exec("echo $subject >>/var/www/html/cacti/plugins/thold/alter.log");
exec("sh /var/www/html/cacti/plugins/thold/sendmessage.sh");

查找 thold_mail($item["notify_extra"], ”, $subject,
$msg, $file_array);行在此行下面加入:

下载: code.txt
exec("echo $subject >>/var/www/html/cacti/plugins/thold/alter.log");
exec("sh /var/www/html/cacti/plugins/thold/sendmessage.sh");

备注:本人的thold安装在/var/www/html/cacti/plugins/thold/目录中,如果注释掉thold_mail,只通过MSN发送报警。不注释掉thold_mail,会通过email和MSN同时发送报警

thold-functions.php生成的alter.log范例如下:

下载: code.txt
192.168.1.207 - Used Space - G: Label: [hdd_percent] is still above threshold of 85 with 99

编写脚本sendmessage.sh自动调用SendMsg发送报警

下载: code.txt
#!/bin/sh
echo `echo -n "date:"&&date +%Y-%m-%d-%H:%M` >> /var/www/html/sendMsg/msn.txt.1
#得到当前的日期+时间
cat /var/www/html/cacti/plugins/thold/alter.log >>/var/www/html/sendMsg/msn.txt.1
#读取alter.log的报警信息
now=`date +%Y-%m-%d-%H:%M`
SA=(disk)
msnaddr=(lvming104@hotmail.com) #报警接收人msn
sendMsg()
{
num=0
while [ $num -lt 1 ];
do
wget --post-data "sender=test@live.cn&password=12346&recipient=${1}&message=${2}" http://127.0.0.1/sendMsg/index.php -O /var/www/html/sendMsg/index.php.1 >/dev/null 2>&1
#sender:发送人msn,password:密码。/var/www/html/sendMsg为sendMsn安装目录
if [ -f /var/www/html/sendMsg/index.php.1 ]; then
if cat /var/www/html/sendMsg/index.php.1 |grep -i successfully >/dev/null 2>&1;then
num=1 #判断信息发送成功
elif cat /var/www/html/sendMsg/index.php.1 |grep -i "The user appears to be offline" >/dev/null 2>&1;then
num=1 #判断msn接受人为是否在线状态
echo "The user is offline."
exit 0
elif cat /var/www/html/sendMsg/index.php.1 |grep -i "Something went wrong trying to connect to the server" >/dev/null 2>&1;then
num=1 #判断msn 服务器存在连接问题
echo "MSN server is wrong."
exit 0
else
num=0 #除了以上三种情况退出循环外,其他情况重试。
fi
rm -f /var/www/html/sendMsg/index.php.1
else
num=0
fi
done
}

mv /var/www/html/sendMsg/msn.txt /var/www/html/sendMsg/bak/msn$now.txt -f 1>/dev/null 2>&1
mv /var/www/html/sendMsg/msn.txt.1 /var/www/html/sendMsg/msn.txt -f 1>/dev/null 2>&1
rm /var/www/html/cacti/plugins/thold/alter.log -f 1>/dev/null 2>&1

for i in 0
do
if cat /var/www/html/sendMsg/msn.txt ; then
messages=`cat /var/www/html/sendMsg/msn.txt ` #读取要发送的信息
sendMsg "${msnaddr[$i]}" "$messages" #发送报警信息
else
continue
fi
done

ok,配置完成了,现在就可以通过MSN接收报警信息了:如下所示

下次更新Cacti实现短信报警,敬请期待

Cacti配置e-mail报警

2008年8月20日 John.Lv 14 条评论

一、 软件环境:cacti(需Threshold插件)
二、 安装过程:
Cacti的安装各位baidu一下,这里就不详细介绍了。
安装Threshold插件
V0.3.9下载地址:http://mirror.cactiusers.org/downloads/plugins/thold-0.3.9.tar.gzv
安装Threshold插件,只需将解压出来的Thold目录拷贝到cacti/plugins/目录下,并修改cacti配置文件(cacti目录下的include/config.php)。在配置中查找$plugins = array();行,在此行下面加入:

下载: code.txt
$plugins[] = 'thold';

刷新cacti首页,你将看到多出来一个Threshld选项卡。如下所示

三、 配置过程:
1.设置Threshold插件:选中console选项卡,在左侧菜单中点击Settings,然后点击Alerting/Thold选项卡


2.设置发送警报通知:在Default Alerting Options中选择Send notifications
3.设置出现down机的情况时(即Monitor出现如图所示 )发送警报通知:选择Dead Hosts notifications
报警邮件范例如下:

下载: code.txt
Host Error : 192.168.1.220 (192.168.1.220) is DOWN
Message : Host did not respond to SNMP           (down机报警)
下载: code.txt
Host Notice : 192.168.1.207 (192.168.1.207) returned from DOWN state   (恢复)

4.设置警报发送纯文本的电子邮件没有图(默认是HTML电子邮件与图表嵌入在电子邮件):选择Send alerts as text
5.设置周末不执行报警检查:选择Weekend exemptions
6.设置报警的门槛:Default Trigger Count
7.设置Emailing Options

下载: code.txt
Mail Services:SMTP。(可以选择PHP mail,sendmail,SMTP三种方式)
From Email Address:按实际设置
From Name:按需要设置(该处显示的name就是email的发件人姓名)

8.设置Sendmail Options(Mail Services设置为sendmail需设置此项)

下载: code.txt
Sendmail Path:/usr/sbin/sendmail(路径是服务器上Sendmail的,仅用于邮件服务选定为Sendmail)

9.设置SMTP Options(Mail Services设置SMTP需设置此项)

下载: code.txt
SMTP Hostname:SMTP服务器如:mail.test.com
SMTP Port:25
SMTP Username: 通过SMTP发送邮件用来验证的用户名,如果你不要求身份验证留空
SMTP Password:通过SMTP发送邮件用来验证的密码,如果你不要求身份验证留空

测试:点击Send a Test Email,测试成功如下所示:

收到的测试邮件范例:

下载: code.txt
This is a test message generated from Cacti. This message was sent to test the configuration of your Mail Settings.
Your email settings are currently set as follows
Method: SMTP
Host: mail.ips.com.cn
Port: 25
Authenication: true
Username: john.lv
Password: (Not Shown for Security Reasons)

配置完成后别忘记save。
下面我以磁盘空间报警为例,来设置具体的报警信息(CPU,DISK,服务,网络等等)
在console选项卡下左侧菜单中点击Threshold Templates 。

在如下图所示中点击Add按钮来添加一个Threshold模板

添加磁盘监控的模板,无论是linux还是windows都是使用的Host MIB

设置按照百分比来监控的,在Data Field选择hdd_percent,可以选择hdd_total,hdd_used,hdd_percent三种

设置以下信息(参照下图:)
选择Enabled 激活检查和报警提醒
High Threshold文本框中填入0.085,意思是当硬盘使用率超过85%时,发送邮件报警。
Threshold CDEF下拉框选择Divide by 1024,
Alert E-Mail填入报警的接收邮箱
完成Threshold模板的添加。

应用刚才创建的Threshold模板
在console选项卡下点击Management ->Devices,选择要应用此模板的Host,点击最上面的Create Graphs for this Host链接,然后点击Auto-create thresholds链接来应用刚创建的Threshold模板。

设置完成后在console选项卡下左侧菜单中点击Thresholds

在此可以管理已创建的警报,如下:

点击threshld选项卡可以查看警报的触发情况,如下:

磁盘报警邮件范例:

下载: code.txt
Host: 192.168.1.207 (192.168.1.207)
URL: http://192.168.1.211/cacti//graph.php?local_graph_id=&rra_id=1
Message: 192.168.1.207 - Used Space - D: Label:tool [hdd_percent] went
above threshold of 0.085 with 0.0896

Ok,磁盘空间的邮件报警就正式配置完成了。

分类: Cacti 标签:

Solarwinds实现MSN报警

2008年8月13日 John.Lv 没有评论

一,软件环境
Solarwinds+msn机器人(msn机器人安装在支持apache+php的环境)
二,msn机器人下载地址及安装方法见
系统监控:msn在线机器人实时报警
三,配置过程
1. Solarwinds报警配置磁盘空间监控
1
在上图中的Configure Alerts中新建报警DiskStatus,按照你的需要配置监控的服务器,报警的条件,监控的周期等,然后按照下图配置满足报警要求后的Action
2

按照上图添加2个Alert Action
Alert Action 1:log the alert to a file将报警保存为alter.log(可随意指定文件名和目录)
Alert Action 2:Execute an external VBScript指定要执行的VbScript,请将VbScript放在fetion的安装目录下,因为下面的VbScript指定的路径是相对路径
备注:请一定要先设置报警保存的log,然后在设置要执行的VbScript,因为只有先生成log,然后在执行VbScript读取log中的短信报警信息,设置好后如下图:
3
配置生效后应该先生成log然后执行VBScript发送短信

2.Log样本如下:

下载: code.txt
Alert: Percent Space Used of 100.121-D:\ is now 84 %
Alert: Percent Space Used of 100.102-C:\ is now 82 %

3. VBScript如下:

下载: code.txt
'本脚本有john.lv编写
logfile="G:\LibFetion\install\alert.log"   '定义报警log请输入Solarwinds中的log设置
sendmsn="lvming104@hotmail.com" '定义msn接收人信息,需在你MSN好友列表中
Set objFS = CreateObject ("Scripting.FileSystemObject")
Dim arrFileLines()
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(logfile, 1)  '读取报警log全部信息
Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
     i = i + 1
Loop
objFile.Close
l = Ubound(arrFileLines) '读取报警log最后一行,因为最近的报警信息永远是最后一行
mess=arrFileLines(l) '定义要发送的信息

Set objExplorer = CreateObject("InternetExplorer.Application")
'通过sendMsg发送信息,本人的sendMsg是安装在另外一台server上sendMsg这个目录下,如果安装在本地把http://192.168.1.211/sendMsg/send.php?改为http://localhost/sendMsg/send.php?
objExplorer.Navigate "http://192.168.1.211/sendMsg/send.php?msnaddr="&sendmsn&"&message="&chr(34)&mess&chr(34)

4.编写http://192.168.1.211/sendMsg/send.php

下载: code.txt
#!/usr/bin/php
<?
$msnaddr = $_GET['msnaddr'];
$messages = $_GET['message'];
include('sendMsg.php');
$sendMsg = new sendMsg();
#login sendMsg with user:test@live.cn and passwd:123456
$sendMsg->login('test@live.cn', '123456');
#who will receive message
$sendMsg->createSession($msnaddr);
#send message With a custom font and color
$sendMsg->sendMessage($messages, 'Times New Roman', '008000');
?>

保存为send.php
备注:由于监控的机器不多,而且报警的条件也比较高,所有报警次数比较少,生成的log就比较小,如果每天生成的log很大,建议log每天生成,增加日期变量即可