实时监控Linux、FreeBSD登陆用户的操作
在 Linux 中,我们可以使用下面这台命令来得到另一个终端的用户的输入输出是什么:
strace -e read,write -s16384 -x -p "用户 pst 的pid"
但 strace 的输出,基本不可读,我刚好发现在 CPAN 上有相应的模块来来帮大家解析,可以通过那个软件直接见到用户的输入输出的内容,可以实时见到他的操作.相当的方便.
cpanm ttylog
这个的使用也很方便,直接使用 w 看看新进入的用户使用的是哪个 tty .然后使用这个软件指定见到的那个 tty 就行. 例如新用户进来后是 pst/4.
ttylog pts/4
这样,就可以实时见到用户的操作了.也可以给这个程序的输出记录到日志中,以后好找别人算账是吧...因为他的每一个操作你都能见到. FreeBSD下的watch命令可以也可实现同样的目的: FreeBSD的watch命令与Linux下的watch命令完全不一样.FreeBSD下的watch命令是查看其它用户的正在运行的操作,而linux下的watch是自动定时运行一个(一行)命令. 下面是FreeBSD下的watch命令的介绍:
watch — snoop on another tty line
watch允许你偷看其它terminal正在做什么,该命令只能让超级用户使用. 为什么要用watch? 有时候,基于安全的目的,你可以用watch看某个用户在干什么.也许你发现你的机器被某人黑了,你想看看他正在你的机器干什么.我不清楚,或者你只是好管闲事. 运行watch需要什么? watch需要打开下面的Kernel options:
pseudo-device snp 3
这会允许你拥有4个 snoop devices. 建立4个devices:
cd /dev
./MAKEDEV snp0
./MAKEDEV snp1
./MAKEDEV snp2
./MAKEDEV snp3
错误:如果看到下面这个错误,那你必须按照上面所说的方法去做:
watch: fatal: cannot open snoop...
redis主从同步
首先在新服务器上直接进入redis-cli,执行从库配置slaveof 192.168.1.100 6379,这里假设要将192.168.1.100的6379端口的redis服务转移过来.这样就已经开始同步了.
通过info可以查看当前服务器是slave. 然后通过info命令查看master_link_status,如果为up,表示同步完成.(在同步过程中,执行查询的时候还是会提示"Redis is loading the dataset in memory",这属于正常情况.把数据从磁盘文件加载到内存中可能会消耗很长的一段时间.)
最后断开主从关系,在redis-cli命令行下执行slaveof no one提示OK,再通过info查看,该新服务器已经自己变成master了. 确保旧的服务器的服务已经停止服务. 上面没有配合说明业务代码对服务器的请求切换,但是我们在切换完服务之后肯定需要转移业务代码的请求吧.那么如何确定服务已经完全转移走了呢? 在旧服务器上通过netstat命令查看是否还有请求过来.
netstat -an|grep "100:6379"|wc -l
有时候netstat的结果也不一定准,因为有些请求已经不在,但是socket状态还在,比如CLOSE_WAIT状态最长可持续2小时.同时socket请求太快,也会出现netstat没数据,但是实际网卡有流量的情况. 我们可以通过tcdump监控网卡在该端口上确实已经没有流量.
tcpdump -i em2 -vv -nn host 192.168.1.100 and port 6379
注意排除监控系统对该redis实例的请求. 如何判断 redis 已经同步完毕呢? 在命令行查看:
info master_link_status:up
则表示同步完成了. 日志文件也可以看:
[48864] 12 Jun 11:24:03.549 * The server is now ready to accept connections on port 6310
[48864] 12 Jun...
CentOS 6 系统优化 Shell 脚本
CentOS 已经发布了6.2版了,现在已经可以用在生产环境了,新版本的内核也能更好的利用硬件.写了一个脚本,用来初始化系统环境,现在分享出来,你可以根据自己的需要,对脚本进行相应的修改.
脚本的内容如下:
#!/bin/bash
#author suzezhi
#this script is only for CentOS 6
#check the OS
platform=`uname -i`
if [ $platform != "x86_64" ];then
echo "this script is only for 64bit Operating System !"
exit 1
fi
echo "the platform is ok"
version=`lsb_release -r |awk '{print substr($2,1,1)}'`
if [ $version != 6 ];then
echo "this script is only for CentOS 6 !"
exit 1
fi
cat EOF
+---------------------------------------+
| your system is CentOS 6 x86_64 |
| start optimizing....... |
+---------------------------------------
EOF
#make the 163.com as the default yum repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -O /etc/yum.repos.d/CentOS-Base.repo
#add the third-party repo
#add the epel
rpm -Uvh...
centos开启nginx的gzip压缩
我们安装apache第一件事情就是开启apache的gzip的压缩,现在我们来开启nginx的gzip压缩. zip压缩用的是http_gzip_module模块.这个模块支持在线实时压缩输出数据流,使用范例:
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
gzip on|off
开启或者关闭gzip模块:
gzip_min_length 1000
设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取. 默认值是0,不管页面多大都压缩. 建议设置成大于1k的字节数,小于1k可能会越压越大. 即:
gzip_min_length 1024
gzip_proxied expired no-cache no-store private auth;
Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的 header头.
gzip_types text/plain application/xml;
匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的.
好了,让我们一起享受nginx的gzip带来的速度上的快感吧.
nginx + php-fpm 访问php提示File not found.
检查虚拟主机配置中的:
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
include fastcgi.conf;
}
看下最后的include的文件是否存在,因为不同的版本这个文件的名字可能不同,所以只看网上的教程可能会照不到这个文件. 比如我本地的是fastcgi.conf,而VPS是fcgi.conf,所以这里一定要注意了.
Discuz论坛头像保存过程中发生网络错误,请重试
运行命令:
chmod -R 777 /var/www/html/htdocs/dovao_bbs/ucenter/upload
完美解决.