Dec 29, 2011

解决Nginx 500错误

这几天打开另一个网站频繁出现500错误,上VPS看nginx日志,错误主要有“No space left on device”和“24: Too many open files”。

现学现卖一个一个问题的解决:
No space left on device
看起来像是没有剩余空间了
  1. 执行“df -m”后,发现可用空间为0%
  2. 使用“du -sh /*”可以查看指定目录下哪个文件占用空间最大
  3. 一路追踪下去“du -sh /srv/www/*”发现nginx log文件占用了20多G。
  4. “tail -n 30 error.log”看下log最近到底报的是什么错,结果全是“24: Too many open files”

再来解决:
24: Too many open files
Linux系统对一个进程打开的文件句柄数量的限制,默认只有1024,并发高一点就达到这个限制了。

  1. “ulimit -a”可以看到当前的设置open files (-n) 1024
  2. 编辑“/etc/security/limits.conf”,在末尾加入“* soft nofile 65535”和“* hard nofile 65535”
  3. 编辑“/etc/nginx/nginx.conf”文件,加入“worker_rlimit_nofile 65535;”

搞定,重启nginx,观察几天看看。

 

Dec 17, 2011

ssh用户登录提醒功能

有时出于安全考虑,可以添加一个SSH登录提醒功能,当用户登录SSH后收到提醒。

提醒功能可以通过邮件或其它功能发送,俺使用的是一个iOS使用“推送信使”提供了URL回调接口,设置好参数后用curl请求一下,一条报警信息就推送到手机。

user=$USER
ip=${SSH_CLIENT%% *}
date=$(date "+%Y-%m-%d_%H:%M")
title="用户$user登录了系统"
content="时间:${date}%0dIP地址:$ip"
app="SSH监控"
url="http://whois.pconline.com.cn/ip.jsp?ip=$ip"

pushMessage() {       
        params="uid=1&secret=6Y2FN7&app=$app&title=$title&content=$content&slient=1&url=$url"
        url="http://ipush.me/api-push?$params"
        curl --connect-timeout 3 -m 3 -s $url
}

pushMessage

 

Nov 15, 2011

将VPS数据库自动备份到另一台FTP服务器

现在大部分VPS都是Unmanaged的,虽然都宣称做了RAID10但在论坛上偶尔还是有看到数据丢失的事情,更多的情况是碰到不符合VPS商的服务条款而被关闭了帐号没及时备份造成的。

正好有一个15刀/年的VPS,由于拿来放网站线路经常抽风所以一直空在那里,现在可以派上用场了。

首先确保正式服务器上安装了lftp(ftp命令行客户端),备份服务器上安装了ftp服务端(任意)。

第一次折腾bash,现学现卖,功能是备份mysql中一个或多个数据库并打包传送到远程ftp服务器中去:

#!/bin/bash

# --------------- 配置项 -------------
# 数据库用户
DB_USER="root"
# 数据库密码
DB_PASSWD="123456"
# 要备份的数据库名,多个用空格分开
DB_BACKUP_DATABASE_LIST="db1 db2"
# 备份文件本地存放路径
DB_BACKUP_DIR="/home/hee/backup/db"
# 远程FTP配置信息,格式:用户名:密码@服务器地址
REMOTE_FTP_DSN="user:passwd@ip"

# ------------ 以下内容无需编辑 -------------
YYYYMMDD=$(date +%Y-%m-%d)

# -----------------------------------
DB_BACKUP_FILE="$DB_BACKUP_DIR/$YYYYMMDD.sql.gz"

# -----------------------------------
mkdir -p $DB_BACKUP_DIR
cd $DB_BACKUP_DIR

mysqldump --user=$DB_USER --password=$DB_PASSWD --lock-all-tables --databases $DB_BACKUP_DATABASE_LIST | gzip > $DB_BACKUP_FILE

lftp $REMOTE_FTP_DSN -e "put $DB_BACKUP_FILE;exit;"

然后设置一个定时任务,按想要的时间定时执行一下就OK了。

Nov 11, 2011

CentOS 5.7安装eAccelerator

eAccelerator是一个免费开源的PHP加速、优化、编译和动态缓存的项目,它可以通过缓存PHP代码编译后的结果来提高PHP脚本的性能,使得一向很复杂和离我们很远的PHP脚本编译问题完全得到解决。通过使用eAccelerator,可以优化你的PHP代码执行速度,降低服务器负载,可以提高PHP应用执行速度最高达10倍。

eAccelerator通过把经过编译后的PHP代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。它的效率非常高,从创建共享内存到查找编译后的代码都在非常短的时间内完成,对于不能缓存到共享内存中的文件和代码,eAccelerator还可以把他们缓存到系统磁盘上。

参照linode安装指南上的方法,默认是没有安装eAccelerator的,得自己把这功能加上。安装前先了解下另一个东东:phpize。

phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块。比如你想在原来编译好的php中加入eAccelerator或者memcached等扩展模块,可以使用phpize。

基础知识了解完了后,开始安装:

# 安装phpize
yum install php-devel
# 下载eaccelerator
wget http://soft.vpser.net/web/eaccelerator/eaccelerator-0.9.6.1.zip
unzip eaccelerator-0.9.6.1.zip
cd eaccelerator-0.9.6.1
phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
make
make install

编辑php.ini:

vi /etc/php.ini

# 在结尾加入
zend_extension="/usr/lib/php/modules/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

创建eAccelerator缓存目录:

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

查看一下phpinfo吧 :-)

 

Nov 09, 2011

一些常用VPS维护使用命令

记忆力越来越差了。偶尔维护使用一下,过几天就忘了。

显示系统进程资源占用状况

[hee@TokyoHot ~]$ top
# M键:按内存使用大小排序(从大到小)
# 1键:显示每个具体CPU核心使用率情况

各VPS间通过SSH互相复制文件(无需FTP、WEB服务器)

# 获取远程服务器上的文件,-P为远程服务器ssh端口
scp -P 22 root@vps.since2006.com:/root/backup.tar.gz /home/backup.tar.gz

# 获取远程服务器上的目录
scp -P 22 -r root@vps.since2006.com:/root/backups/ /home/backups/

vi中字符串替换功能

# 使用:s命令进行查找替换

# 例1:将内容中第一次出现的abc替换成123
:%s/abc/123

# 例1:将内容中所有abc替换成123
:%s/abc/123/g

批量更改目录下文件所属组及文件权限

# 更改目录及目录下所有文件所属用户组
chgrp -R groupName directoryName

# 更改目录及目录下所有文件组用户权限可写
chmod -R g+w directoryName

 

最近收到的评注

since 2006

文章分类|Categories

订阅更新|Feed

RSS
抓虾
google reader
bloglines
鲜果

页面查询:17次,耗时:0.02秒