人若无名,便可专心练剑

linux定时任务crontab的使用

  |   0 评论   |   2,211 浏览

linux上有很多工具对于我们每个用户来说总是很方便,而且简单易学,短小精悍^-^

crontab linux定时任务命令:

其服务的使用我们使用如下命令进行开启和关闭或者重新加载

开启服务:

service crond start 或者 /etc/init.d/crond start
关闭服务
service crond stop 或者 /etc/init.d/crond stop
重新加载:
service crond reload 或者 /etc/init.d/crond reload
所支持的命令如:
/etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}
好了,服务我们开启了,那么接下来我们来进行我的任务脚本吧,go ^-^


任务相关的实现我们是通过另外一个命令实现的:crontab(在/etc/下面有几个关于crontab的文件,详细请man crontab)

使用方法如:

usage:	crontab [-u user] file
	crontab [-u user] [ -e | -l | -r ]
		(default operation is replace, per 1003.2)
	-e	(edit user's crontab)
	-l	(list user's crontab)
	-r	(delete user's crontab)
	-i	(prompt before deleting user's crontab)
	-s	(selinux context)

其定时格式如下:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
^_^,很直观,很明了


根据上面我们进行实例吧。

1,查看当前登录用户的任务计划

crontab -l
2,编辑或添加当前用户的任务计划(添加或者编辑完成后使用vi命令保存退出即可)
crontab -e
3,具体任务go,go,go
需求一,在每天凌晨1点执行 命令:netstat -atlnup > /root/network.log
00 1 * * * netstat -atlnup>/root/network.log
需求二,在每分钟执行命令:netstat -atlnup > /root/network.log
*/1 * * * * netstat -atlnup>/root/network.log

需求三,在每小时执行命令:netstat -atlnup > /root/network.log

00 */1 * * * netstat -atlnup>/root/network.log
后记:这对于管理员来说执行一些日常的日志已经很有用了,特别是对于日志备份,系统备份方面。

       当然这仅仅是简单的运用,其还有一些高级的用法:    

       更多移步如下:     http://en.wikipedia.org/wiki/Cron

                                    http://linuxconfig.org/linux-cron-guide

linux root账户登录邮件提醒功能

  |   0 评论   |   2,724 浏览

由于我们监控的是root帐户,因此我们需要在其环境变量(推荐 .bashrc)配置上加入如下shell


echo "登录ip地址:" `netstat -atlnup|grep ":22"|awk '{print $5}'|grep  '[^1.0.0.0.0:*]'|awk -F ":" '{print $1}'` "登录ip端口:" `netstat -atlnup|grep ":22"|awk '{print $5}'|grep  '[^1.0.0.0.0:*]'|awk -F ":" '{print $2}'` |mail -s "`w`" c2y2@qq.com


1,过滤出所有登录ssh端口的网络连接得到ip地址:


netstat -atlnup|grep ":22"|awk '{print $5}'|grep  '[^1.0.0.0.0:*]'|awk -F ":" '{print $1}'
2,过滤出远方ip连接服务器22端口的远端端口:



netstat -atlnup|grep ":22"|awk '{print $5}'|grep  '[^1.0.0.0.0:*]'|awk -F ":" '{print $2}'
3,设置邮件标题:内容为具体登录情况



mail -s "`w`" abcd@qq.com
4,发送邮件



echo "登录ip地址:" `netstat -atlnup|grep ":22"|awk '{print $5}'|grep  '[^1.0.0.0.0:*]'|awk -F ":" '{print $1}'` "登录ip端口:" `netstat -atlnup|grep ":22"|awk '{print $5}'|grep  '[^1.0.0.0.0:*]'|awk -F ":" '{print $2}'` |mail -s "`w`" c2y2@qq.com
这样服务器只要登录root账户,那么系统就将发邮件给管理员邮箱。^_^


使用前提:必须配置mail客户端,且能正常使用


linux mail 发送普通附件及数据库备份脚本

  |   0 评论   |   2,684 浏览

由于自己的需求仅仅是进行数据库备份所以采用uuencode方式发送mysql数据库备份

如果是debian或者ubuntu系统如果不存在uuencode命令,则采用如下命令进行安装

sudo apt-get  install sharutils
如果是centos系统则采用:

yum install sharutils
进行安装。

然后我们就可以编写我们数据库备份脚本并发送到自己的邮箱

#!/bin/bash
#备份blog数据库
mysqldump -u root -pmysqlpassword mydb > mydb.sql
uuencode -m mydb.sql mydb.sql|mail -s "blog数据库备份" abcd@qq.com
rm mydb.sql -rf

脚本保存为backup.sh

创建定时执行计划

[root@c2y2]crontab -e
1 2 */1 */1 */1 /bin/bash /root/backup.sh
表示每天的凌晨2点1分执行数据库备份脚本。


这样我们就可以将备份脚本发送到我们的邮箱里边,我们收到邮箱了如何解码出我们自己的文件呢?

我们收到邮件后,将邮件的内容全部拷贝并粘贴到一个新创建的文本文件中,然后将文件的后缀名改为uue(如我将文件保存为:mydb.uue)

这还么有得到我们想要的文件呢,我们还需要进一步操作才能得到我们的文件

如果我们在linux中可以如下命令得到我们的文件

uudecode -o mydb.sql mydb.uue
如果我们在windows系统中,我们可以直接采用压缩文件解压得到我们的文件


后记:

   1, 在创建定时执行计划时:如果我们是root用户,并且创建定时脚本后不能正常执行计划,那么创建计划的时候我们不需要跟我们的用户名,如果跟了反而不能正常执行

    比如我创建的定时执行脚本,就没有跟用户

  [root@c2y2]crontab -e
  1 2 */1 */1 */1 /bin/bash /root/backup.sh
   2,采用uudecode发送文本附件时,特别是含有中文的我们有可能解压出来是乱码,我们可以采用如下方式解决:
     uuencode -m file.txt file.txt|mail -s 'test' abcd@qq.com

    也即是uuencode需要跟一个-m参数,统一才采用base64编码,这样我们解压出来后就不会存在乱码现象了。

   3,这种方式发送附件不推荐大文件采用这种方式,编码解码太麻烦了,我们采用更为强大的mutt发送邮件附件,另外mail 有-a参数提示可以直接跟附件,但是我至今没有成功。出现了如下错误

    待解决:

    clsmtp-server: 551 User not local; please try <forward-path>
    "/root/dead.letter" 15/318


linux mail发送系统邮件配置

  |   0 评论   |   2,177 浏览

编辑文件:


/etc/mail.rc



加入如下脚本


set from=***@126.com
set smtp=smtp.126.com
set smtp-auth-user=***
set smtp-auth-password=abcd
set smtp-auth=login


其中

from :表示邮件的来自于(对于收件箱那边来说)

smtp:邮箱的smtp服务器地址

smtp-auth-user:邮箱账户(不需要跟如 :@126.com)

smtp-auth-password:邮箱密码(明文密码)


配置好后发送邮件测试如:


mail -s '这里是标题test'  abcd@gmail.com < abc.txt
abc.txt 里边则记录了我们要发送的内容


另外我们还可以这样:


[root@c2y2]# mail -s 'hello world' abc@gmail.com
test1
test2
test3
EOT
[root@c2y2]#
哪个EOT不是输入的,是我们直接CTRL+D就结束内容输入并发送。也即是说:CTRL+D就就结束并发送了


注意:mail默认采用sendmail来发送邮件的,因此要想能正常发送邮件,必续保证sendmail能正常使用。

java web压力测试问题故障篇一

  |   0 评论   |   2,460 浏览

这几天一直配合同事进行压力测试,在其中也还是遇到了一些问题,并学习到了一些新的知识,感觉很有必要记录下。

环境:windows server2008 32bit  8G ,jre6,tomcat6.0.39
压力测试工具:loadrunner11
现象一:tomcat配置最大堆内存时,始终不能超过1608m(自己测试出来的,方法如小提示,将其配置到超过这个值时,发现tomcat无法正常启动

错误日志为:

2014-03-11 23:14:23 Commons Daemon procrun stdout initialized 
Error occurred during initialization of VM Could not reserve enough space for object heap
然后网上搜寻了哈相关的资料,这里面涉及到系统位数,jvm内存设置等方面的原因。

小提示:测试电脑的jvm能使用的最大堆内存的方法如:java -Xmx=2048M -version  如果能正常显示版本表明可以支持该大小的堆内存分配

堆内设置网上一般推荐:

-Xms JVM初始化堆大小(总内存 1/64)
-Xmx JVM最大推内存大小(总内存 1/4)
因此该测试服务器内存为8G,按照以上设置的化,那么我的tomcat -Xmx大小应该能设置为2048M,但是设置为2048时,tomcat是不能正常启动的,

具体原因我们可来看看下面这段知识


堆(Heap)和非堆(Non-heap)内存

按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。

堆内存分配

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最 大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时, JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。


JVM内存限制(最大值)
首先JVM内存首先受限于实际的最大物理内存,假设物理内存无限 大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是 2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了

因此这下算是明白了,jvm的堆最大堆内存不仅仅受限于我们内存的大小,还跟我们操作系统,以及操作系统版本有直接关系的。


现象二:当压力达到一定程度时,程序出现莫名的空指针异常,tomcat自身日志同时显示:java.lang.OutOfMemoryError: unable to create new native thread

原因:


1,jvm创建的线程数达到了jvm能创建线程数的极限。
2,重新配置-Xmx大小,网上有说该值的大小与Jvm能创建的线程数成反比


解决方法:


1,减小-Xmx值的大小
2,减少单个线程栈的大小,在JVM启动中使用-Xss参数。目前JDK1.4中每个线程栈所大小是256K,1.5是1M.


相关知识点:

所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 4 GB 的内存)。对于 Microsoft Windows 操作系统,应用程序可以访问 2 GB 的进程地址空间,称为用户模式虚拟地址空间。应用程序拥有的所有线程都共享同一个用户模式虚拟地址空间。其余 2 GB 为操作系统保留(也称为内核模式地址空间)

相关链接:1,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6316197

                     2,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6747415

                     3,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8031493

                     4,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6316197

                    5,  https://blogs.oracle.com/ksrini/entry/hotspot_primordial_thread_jni_stack  有对-Xss配置的说明

                    6, http://docs.oracle.com/cd/E19957-01/817-2180-10/pt_chap5.html 官方jvm 栈内存,等内存配置说明。

                    7,http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#gc_heap_32bit 官方jvm 栈内存,等内存配置说明。


住所进贼

  |   1 评论   |   2,213 浏览

今天女朋友打来电话说,住处被盗了,有点郁闷,还被说,平实怎么控制她电脑的,到关键时刻都不管用了,我想说这被盗是我能控制的么,及时我给你装个守护木马,那个贼能笨到还用你原来的系统么,而且贼还不一定会用而是出售给别人了,这里面不可控的因素太多了,还是算了吧,这个还真不靠谱!!!哎,说多了都是泪啊!


这些个贼也是   才过完年,为什么就这么迫不及待,你们这不是作死的节奏吗,好吧,你们赢了,你们不会死,反而电脑你可以轻而易举的使用,警察大哥们貌似也没辙,因此,恭喜你们此战报捷。

好吧,不说你们了,我自己也该反省反省,

经过这次事件,感觉很是感触,笔记本被盗,很后悔上面没安装守护程序,很后悔没在上面设置硬盘密码,bios超级密码,因此从此决定,凡事自己的亲人的电脑必须三重密码,bios超级密码,硬盘密码,系统密码。在此立字,仅次反省!!!



外加一个硬盘密码破解教程:http://wenku.baidu.com/link?url=_vfCrO_TyrYjiQ8mXQ43x3nH_LO-nD-Y6aCpHMg6GptWYGzBG5kLedLrmY46tssNemqhQaJx9rR4x8_cCO3vCYHc-hVUZWBKJHYRFI7WrWq

Linux系统信息查看命令

  |   0 评论   |   2,065 浏览


系统
# uname -a #查看内核/操作系统/CPU信息
# head -n 1 /etc/issue #查看操作系统版本
# cat /proc/cpuinfo #查看CPU信息
# hostname #查看计算机名
# lspci -tv #列出所有PCI设备
# lsusb -tv #列出所有USB设备
# lsmod #列出加载的内核模块
# env #查看环境变量
资源
# free -m #查看内存使用量和交换区使用量
# df -h #查看各分区使用情况
# du -sh <目录名> #查看指定目录的大小
# grep MemTotal /proc/meminfo #查看内存总量
# grep MemFree /proc/meminfo #查看空闲内存量
# uptime #查看系统运行时间、用户数、负载
# cat /proc/loadavg #查看系统负载
磁盘和分区
# mount | column -t #查看挂接的分区状态
# fdisk -l #查看所有分区
# swapon -s #查看所有交换分区
# hdparm -i /dev/hda #查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE #查看启动时IDE设备检测状况
网络
# ifconfig #查看所有网络接口的属性
# iptables -L #查看防火墙设置
# route -n #查看路由表
# netstat -lntp #查看所有监听端口
# netstat -antp #查看所有已经建立的连接
# netstat -s #查看网络统计信息
进程
# ps -ef #查看所有进程
# top #实时显示进程状态
用户
# w #查看活动用户
# id <用户名> #查看指定用户信息
# last #查看用户登录日志
# cut -d: -f1 /etc/passwd #查看系统所有用户
# cut -d: -f1 /etc/group #查看系统所有组
# crontab -l #查看当前用户的计划任务
服务
# chkconfig --list #列出所有系统服务
# chkconfig --list | grep on #列出所有启动的系统服务
程序
# rpm -qa #查看所有安装的软件包 


 出处:http://os.51cto.com/art/200910/156405.htm

linux 打包命令及压缩命令(tar)

  |   0 评论   |   2,134 浏览
一,tar打包
 
exp@c2y2:~$ ls
apache-tomcat-6.0.37   info~                    qq_password~
 burpsuite_pro_v1.5.18  iptables~                sessionKeep.html~
 Desktop                jinzhi.swf               sketchbook
 Documents              jwc.shzu.edu.cn~         social-info
 Downloads              login_iframe.html~       ssh.sh
 dsniff.services        login_iframe.temp.html~  test
 easy-creds             mama.txt~                test.war
 Fiddler2               MyEclipse                tor
 google_appengine       passwordtest.txt~        vi.txt
 HostServer.class       pic                      wirelessFolder
 HostServer.java        Picture                  xssing
 hydra.restore          qq.html~                 Yunio
 info                   qq.js~                   zarp-master
比如打包:里边的Picture目录及文件
exp@c2y2:~$ tar -cf Picture.tar Picture/*

二,解包 解包:Picture.tar

exp@c2y2:~$ tar -xf Picture.tar 

三 为了更好的利用空间节省空间,我们可以使用 tar命令进行压缩 压缩及压缩后对比

exp@c2y2:~$ tar czvf Picture.tar.gz Picture.tar 
Picture.tar
exp@c2y2:~$ ls -al --block-size=K |grep Picture.tar
-rw-r--r--  1 exp  exp   12250K Mar  1 15:23 Picture.tar
-rw-r--r--  1 exp  exp   11966K Mar  1 15:31 Picture.tar.gz


四,解包
exp@c2y2:~$ tar xzvf Picture.tar.gz 
Picture.tar
exp@c2y2:~$ ls -al --block-size=k |grep Picture.
-rw-r--r--  1 exp  exp   24500K Mar  1 15:52 Picture.tar
-rw-r--r--  1 exp  exp   23930K Mar  1 15:52 Picture.tar.gz
后记:在linux打包命令用处很大哈,备份,还原经常需要使用(更多命令请:man tar)





centos6.3禁用IPv6

  |   0 评论   |   2,011 浏览
IPv6
还没有完全普及,但是安装完系统之后IPv6是有效的,在一定程度上影响网络性能,所以在我们在完全不使用IPv6的情况下,最好关闭IPv6。其实在上一篇网络设置的文章中,我们提到过是否激活IPv6,但是只是那一点设置还是不能
完全关闭IPv6,所以本文以完整的步骤叙述一下如何关闭它。

1.修改/etc/sysconfig/network,追加:

NETWORKING_IPV6=no

2.修改/etc/hosts,把ipv6的那句本地主机名解析的也注释掉:

#::1 localhost localhost6 localhost6.localdomain6

3.让系统不加载ipv6相关模块,这需要修改modprobe相关设定文件,为了管理方便,我们新建设定文件/etc/modprobe.d/ipv6off.conf(名字随便起)(RHEL6.0之后没有了/etc/modprobe.conf这个文件),内容如下,三种方式,总有
一款适合你:
alias net-pf-10 off
options ipv6 disable=1

或者
install ipv6 /bin/true

或者
install ipv6 /sbin/modprobe -n -i ipv6

注意,如果你使用了网卡绑定(bond)技术,而且不希望用ipv6,那么你使用第一种,否则系统启动时,bonding模块可能会加载失败。
4.重启系统,然后确认:
[root@test ~]# lsmod | grep -i ipv6
[root@test ~]# ifconfig | grep -i inet6

如果上述2个命令执行的结果没有任何显示,那么说明ipv6已经被完全禁止了。
后记:
在第三步不加载ipv6模块的方法里,可能有人会有类似这样的设置方法:
alias net-pf-10 off
alias ipv6 off
options ipv6 disable=1



虽然这样在系统重启后,ipv6的确没被加载,但是因为第二句,在有的版本的系统里,当我们重启网络的时候,会出现如下错误:
FATAL: Module off not found.

我估计大家都不希望在启动过程中看到FATAL这样的错误信息,所以我就采用正文里所设置的方法。



出处:http://hi.baidu.com/404656204/item/848f29d2f9231014d68ed0db