8月 02

linux远程通过ssh启停tomcat

  在linux上远程通过ssh启停tomcat,因为存在环境变量加载问题,所以写一个shell脚本,放在tomcat的bin目录下。CentOS测试通过。需要使用bash。因为脚本中包含脚本名字,在查找时要过滤掉自己,所以如果需要修改脚本名字,在脚本内也要相应的修改。

#!/bin/bash
# -------------------------------------------------------------------------------
# Filename:    tomcatcomm.sh
# Revision:    1.0
# Date:        2013-7-29
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Description: 
# -------------------------------------------------------------------------------
# Source function library.
. /etc/init.d/functions
source /etc/profile

#### shell env
path=$(dirname $0)
if [ ${path:0:1} == . ]; then
   path=${path/./$(pwd)}
fi
my_name="tomcatcomm.sh"

###### delete tomcat`s work dir and startup server
del_start()
{
    /bin/rm -rf ${1}work/*
}

######main()
case "$1" in
  start)
       get_pid_count=`/bin/ps -ef|grep -v grep|grep -v ${my_name}|grep ${path}|wc -l`
       if [ ${get_pid_count} -gt 0 ] ; then
          /bin/ps -ef|grep -v grep|grep -v ${my_name}|grep ${path}|awk ' ''{print $2}'|xargs kill -9
          sleep 1
          get_pid_count=`/bin/ps -ef|grep -v grep|grep -v ${my_name}|grep ${path}|wc -l`
           if [ ${get_pid_count} -gt 0 ] ; then
              echo "Error"
           else
              del_start ${path}
              ${path}/startup.sh
           fi
        else
            del_start ${path}
            ${path}/startup.sh
        fi
        ;;
  stop)
        ${path}/shutdown.sh
        del_start ${path}
        sleep 1
        ;;
  restart)
	$0 stop
	$0 start
	;;
  *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac

tomcat远程启停脚本

6月 07

python 对字符串的加密解密

  需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错。
  安装PyCrypto,可以用AES和DES。我使用DES加解密。加密后将密文转为16进制,在入库。测试代码如下。

#!/bin/python
#-*- coding:utf-8 -*-
# Filename:
# Revision:    
# Date:        2013-06-07
# Author:      simonzhang
# web:         www.simonzhang.net
# Email:       simon-zzm@163.com
### END INIT INFO
# easy_install PyCrypto
from binascii import b2a_hex, a2b_hex
from Crypto.Cipher import DES
key = '12345678' #长度必须是8位的
text = 'simonzhang.net  '  #长度必须是8的倍数,我用空格补的
# 实例化
obj = DES.new(key)
# 加密
cryp = obj.encrypt(text)
pass_hex = b2a_hex(cryp)
print pass_hex
print '=' * 20
# 解密
get_cryp = a2b_hex(pass_hex)
after_text = obj.decrypt(get_cryp)
print after_text

测试代码

11月 26

php服务器CPU负载过高故障解决

  今天接到问题,服务器跑一段时间总是cpu使用量突然增大,然后就不能连接了。突然增大情况无规律。通过查看平时服务器运行正常,CPU、内存和IO用量都不高,日志报警大致信息如下:
[WARNING] fpm_stdio_child_said(), line 167: child 30951 (pool default) said into stderr:….. [ERROR] fpm_unix_init_child(), line 168:

setrlimit(RLIMIT_NOFILE) failed: Invalid argument (22)”

  通过安装和初步处理人员沟通了解到。现在已经按照日志在网上搜索,按照网上的解决方案进行处理。处理如下

1、提升服务器的文件句柄打开打开
/etc/security/limits.conf : (增加)
* soft nofile 51200
* hard nofile 51200
# vi /etc/security/limits.conf 加上
* soft nofile 51200
* hard nofile 51200
2、提升nginx的进程文件打开数
nginx.conf : worker_rlimit_nofile 51200;
3、修改php-fpm.conf文件,主要需要修改2处。
命令 ulimit -n 查看限制的打开文件数,php-fpm.conf 中的选项rlimit_files 确保和此数值一致。
10240
51200
4、
# vi /etc/sysctl.conf
底部添加
fs.file-max=51200

  “max_requests”为什么是10240,不知道所以然。

  因为其他资源已经占满,或者存在内存泄露等问题,再大量请求时,系统单个任务压力过大导致服务器不稳定。所以经将配置改为“1024”减少最大值重启数量。

  优化并不是单纯的将参数调大,如果这样能解决,那发布版本时直接都改为最大就好了。也不能按照网上的解决方案照搬方法。所以在解决过程中,要参考学习,也要搞清原理,按照当前环境适当调整。通过调整,服务器已经稳定运行3个月,没有再次出现问题。

2月 24

resin 展示静态页面中文乱码

  编辑了一个html,页面编码使用utf-8,保存也使用utf-8,本地直接用浏览器测试正常。但是上传到centos下resin-pro-4.0.6的中文就乱码了。将页面放到centos下的nginx中,中文显示正常。所以确定是resin展示的问题。

  修改resin配置 conf/app-default.xml

原始配置如下:


    
      false
      1024
      true
    
    
  

增加配置

utf-8

,修改结果如下:


    
      utf-8
      false
      1024
    
    
  

重启resin服务,浏览html正常。
注:清除浏览器的页面缓存后测试

7月 03

linux iptables 我的例子

[整理人:张子萌 2010-7]
  服务器为内网服务器,对外提供web服务器需要解析DNS,所以对外开通80、53端口。服务器登陆需要连接连接到VPN服务器后,才能连接服务器。服务器使用eth0网卡.
  打开iptables文件
#vi /etc/sysconf/iptables
添加如下内容:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
[0:0] -A INPUT -s 192.168.1.0/255.255.255.0 -p icmp -m icmp –icmp-type any -j ACCEPT
[0:0] -A INPUT -p icmp -m icmp –icmp-type any -j DROP
[0:0] -A INPUT -p udp -m udp –sport 53 -j ACCEPT
[0:0] -A INPUT -p udp -m udp –dport 53 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –sport 80 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –sport 25 -j ACCEPT
[0:0] -A INPUT -s ! 192.168.1.0/255.255.255.0 -p udp -j ACCEPT
[0:0] -A INPUT -s ! 192.168.1.0/255.255.255.0 -p tcp -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –dport 110 -j DROP
[0:0] -A FORWARD -p tcp -m tcp –tcp-flags SYN,RST,ACK SYN -m limit –limit 1/sec -j ACCEPT
[0:0] -A FORWARD -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK RST -m limit –limit 1/sec -j ACCEPT
[0:0] -A FORWARD -p icmp -m icmp –icmp-type 8 -m limit –limit 1/sec -j ACCEPT
[0:0] -N syn-flood
[0:0] -A syn-flood -m limit –limit 1/s –limit-burst 4 -j RETURN
[0:0] -A syn-flood -j DROP
[0:0] -A OUTPUT -d 192.168.1.0/255.255.255.0 -p udp -j ACCEPT
[0:0] -A OUTPUT -d 192.168.1.0/255.255.255.0 -p tcp -j ACCEPT
[0:0] -A OUTPUT -p udp -m udp –sport 53 -j ACCEPT
[0:0] -A OUTPUT -p udp -m udp –dport 53 -j ACCEPT
[0:0] -A OUTPUT -p tcp -m tcp –sport 80 -j ACCEPT
[0:0] -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT
[0:0] -A OUTPUT -p tcp -m tcp –dport 25 -j ACCEPT
[0:0] -A OUTPUT -d ! 192.168.1.0/255.255.255.0 -o eth0 -p udp -j DROP
[0:0] -A OUTPUT -d ! 192.168.1.0/255.255.255.0 -o eth0 -p tcp -j DROP
COMMIT
  保存内容,重启防火墙。
# /etc/init.d/iptables restart
注:在远程调试防火墙时,为了避免调试失败,自己都进不去,最好把防火墙设置为不随操作系统启动。命令如下:

# chkconfig –level 0123456 iptables off

个人配置仅供参考
参考网站:http://www.hudong.com/wiki/iptables%E5%AE%9E%E4%BE%8B