nginx [emerg]: getpwnam(“www”) failed
在配置nginx提示如下错误时:
[emerg]: getpwnam(“www”) failed
解决方案: 在nginx.conf中 把#user nobdy改为user www www既可.
如果还提示同样的错误,请检查www组和www用户是否存在,不存在的话,直接创建即可
/usr/sbin/groupadd www /usr/sbin/useradd -g www www
By admin
read more在配置nginx提示如下错误时:
[emerg]: getpwnam(“www”) failed
解决方案: 在nginx.conf中 把#user nobdy改为user www www既可.
如果还提示同样的错误,请检查www组和www用户是否存在,不存在的话,直接创建即可
/usr/sbin/groupadd www /usr/sbin/useradd -g www www
By admin
read more一.安装phpredis
# wget https://download.github.com/owlient-phpredis-2.1.1-1-g90ecd17.tar.gz # tar -zxvf owlient-phpredis-2.1.1-1-g90ecd17.tar.gz # cd owlient-phpredis-2.1.1-1-g90ecd17 # /usr/local/php/bin/phpize # ./configure –with-php-config=/usr/local/php/bin/php-config # make && make install
修改php.ini文件,应用扩展
# /usr/local/php/etc/php.ini 加入: extension=redis.so
重启httpd
# service httpd -k restart
我这里使用的是php-fpm模块运行的Nginx
/usr/local/php/sbin/php-fpm restart
通过phpinfo()函数查看,可以看到redis扩展
如果想用redis来存储session的话,可以这样配置SESSION,不过好像我们用memcached来存储session的比较多一些的,呵呵:
#ini_set(‘session.save_handler’, ‘redis’); #session_save_path(“tcp://host1:6379?weight=1,tcp://host2:6379?weight=2&timeout=2.5,tcp://host3:6379?weight=2”);
?>
如果要安装最新的php扩展.先安装版本控制.这里用的是git.安装教程请参考: http://blog.haohtml.com/archives/10093
#/usr/local/git/bin/git clone
//下载源码再安装扩展
二.测试phpredis:
php测试代码:
$redis = new Redis(); $redis->connect(‘127.0.0.1′,6379); $redis->set(‘test’,’hello world!’); echo $redis->get(‘test’); ?>
输出hello world!
队列测试代码:
入队列操作文件 list_push.php
$redis = new Redis(); $redis->connect(‘127.0.0.1’, 6379); while (true) { $redis->lPush(‘list1’, ‘A_’.date(‘Y-m-d H:i:s’)); sleep(rand()%3); } ?>
By admin
read morephpize 是属于 php-devel 中的东西,主要是设定 php 外挂模块的一些设定
所以安装 php-devel 相关套件就会有 phpize 可以使用 (档案预设存放于 /usr/bin/phpize )
phpize 命令是用来准备 PHP 外挂模块的编译环境的。下面例子中,外挂模块的源程序位于 extname 目录中:
$ cd extname $ phpize $ ./configure (注一) $ make $ make install
成功的安装将建立 extname.so 并放置于 PHP 的外挂模块目录中 (预设存放于 /usr/lib/php/modules/ 内) 。
需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此外挂模块。
注一:
如在执行 ./configure 时出现 not find –with-php-config 时,
可重下以下指令,因 –with-php-config 预设在 /usr/bin/php-config 可找到
./configure –with-php-config=/usr/bin/php-config
需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此扩展库。
**使用方法请参考: **
为PHP安装phpRedis扩展模块: linux下用phpize给PHP动态添加扩展:
By admin
read more统计apache日志中每日访问IP中访问量最大的100个IP地址
cat access.log |awk ‘{print $1}’|sort|uniq -c|sort -nr|head -100 > 37res.txt
来源:
By admin
read more因要测试一些软件,需要2.6.30以上的内核,安装好CentOS 5.5,内核是2.6.18-194.el5.这次的升级还算比较顺利,具体的过程如下:
[root@localhost ~]# uname -r 2.6.18-194.el5
1.下载linux-2.6.30内核包到/usr/src目录
cd /usr/src wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.gz tar -xzvf linux-2.6.30.tar.bz2 -C /usr/src cd linux-2.6.30 make mrproper 清除环境变量,即清除配置文件 make menuconfig 在菜单模式下选择需要编译的内核模块:
networking support—>networking options—>network packet filtering framework(netfilter)
(1).core netfilter configuration A 勾中”Netfilter connection tracking support” -m state相关模块是依赖它的,不选则没有。 B 将netbios name service protocal support(new) 编译成模块,不然后面升级iptables后启动时会出错 C 勾中“Netfilter Xtables support (required for ip_tables)” (2).IP: Netfilter Configuration A 将 “IPv4 connection tracking support (require for NAT)” 编译成模块。 B 勾中IP tables support (required for filtering/masq/NAT) 。 C 将 “Full NAT” 下的 “MASQUERADE target support” 和 “REDIRECT target support” 编译成模块 (3).其它模块可以根据自己的需要进行选择,若不懂可以参考内核配置手册.
By admin
read more打算给系统装一个oracle,发现磁盘空间不足。在安装系统的时候我选择的是自动分区,系统就会自动以LVM的方式分区。为了保证系统后期的可用性,建议所有新系统安装都采用LVM,之后生产上的设备我也打算这样做。
参于LVM基本介绍与常用命令请参考:
LVM结构图
扩容之前的磁盘状况
[root@localhost ~]# df -h
文件系统 容量 已用 可用已用%%挂载点
/dev/mapper/VolGroup-lv_root 5.3G 2.5G 2.6G 50% /
tmpfs 538M 0 538M 0% /dev/shm
/dev/sda1 485M 30M 430M 7% /boot
[root@localhost ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
……………
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 1045 7875584 8e Linux LVM
By admin
read more下面的操作是在vmware下进行的.使用的是scsi硬盘.
一.新添加一个硬盘后,用fdisk -l查看的时候,没有发现新硬盘,后台重启了下linux.再次使用fdisk -l命令即可看发现新添加的硬盘.新使用大小为5G.
由于我们安装系统的时候用的一块scsi硬盘,SCSI接口设备是用sd命名的.所以第一块硬盘显示的是/dev/sda.当添加第二块scsi硬盘的时候,就成了/dev/sdb了.依次类推.如果使用的是 IDE 硬盘的话,则是 hda ,hdb,hdc…,同样依次类推.
二.使用fdisk进行分区
#fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help):
进入fdisk的命令提示行下.
By admin
read moreLVM 是逻辑盘卷管理器( Logical Volume Manager )的简称,是一种分区管理机制。 LVM 是建立在硬盘 和分区 之上的一个逻辑层,为文件系统屏蔽下层磁盘分区布局,从而提高磁盘分区管理的灵活性。
要配置LVM,可以按以下步骤进行:
1. 创建和初始化物理卷(Physical Volume),通过pvcreate建立pv,即pv阶段;
2. 添加物理卷到卷组(Volume Group),使用vgcreate加入多个pv成为vg,即vg阶段;
3. 在卷组上创建逻辑卷(logical volume),使用lvcreate划分vg,成为一个或多个lv,即lv阶段;
上图参考: http://www.haohtml.com/server/unix/46733.html
具体思路是:将若干个磁盘分区连接为一个整块的卷组( Vloume group ),管理员可以在卷组上随意创建逻辑卷( logical volumes ),并进一步在逻辑卷上创建文件系统。
物理卷( Physical Volume , PV )
PV 在 LVM 系统中处于最底层,PV 一般是整个硬盘、或硬盘上一个可用分区
卷组( Volume Group , VG ) 建立在 PV 之上,可以由多个 PV 组成一个 VG ,也可以是单个.VG 创建之后,可以动态地添加 PV 到 VG 中,在 VG 上一个创建多个 LVM 分区(逻辑卷)
一个 LVM 系统中可以包含多个 VG(注释:在这 LVM 系统中你可以把 VG 理解为实际的物理硬盘)
By admin
read moreLinux下nload的安装:
nload是个很好用的一个工具,功能也很强.只是相对单一,只能查看总的流量,不能像iptraf那样,可针对IP,协议等 可以实时地监控网卡的流量,分Incoming,Outgoing两部分,也就是流入与流出的流量。同时统计当前,平均,最小,最大,总流量的值,使人看了一目了然,如下图
下载地址:
http://sourceforge.net/project/showfiles.php?group_id=35865
#wget http://cdnetworks-kr-1.dl.sourceforge.net/project/nload/nload/0.7.2/nload-0.7.2.tar.gz
#tar zxvf nload-0.7.2.tar.gz
#cd nload-0.7.2
#./configure –prefix=/usr/local/nload && make && make install
安装好以后,来看看效果
#/usr/local/nload/bin/nload
Device eth0 [192.168.100.210] (1/13):
===================================================================================
Incoming:
Curr: 31.23 kBit/s
Avg: 95.94 kBit/s
Min: 0.89 Bit/s
Max: 0.54 kBit/s
Ttl: 2.41 GByteOutgoing:
Curr: 41.34 kBit/s
Avg: 82.34 kBit/s
Min: 7.41 kBit/s
Max: 0.30 kBit/s
Ttl: 3.84 GByte
可以看到他可以监控到输出和输入的流量,感觉还不错,呵呵,完全可以用到流量监控报警机制上,那个就是要看你的脚本功底了 哈哈.
=====================================================================
FreeBSD下nload安装及使用:
nload是查看网卡当前流量的工具
freebsd#cd /usr/ports/net/nload
freebsd#make install
By admin
read more生产环境下建议关闭此功能,因绝大部分场景下此选项会产生效率低下问题。
query_cache_size = 64M
指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:
# > SHOW VARIABLES LIKE ‘%query_cache%’; # > SHOW STATUS LIKE ‘Qcache%’;
# 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况; 如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;
Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
“Qcache_free_blocks”:Query Cache 中目前还有多少剩余的blocks。如果该值显示较大,则说明Query Cache 中的内存碎片较多了,可能需要寻找合适的机会进行整理。 ● “Qcache_free_memory”:Query Cache 中目前剩余的内存大小。通过这个参数我们可以较为准确的观察出当前系统中的Query Cache 内存大小是否足够,是需要增加还是过多了;
● “Qcache_hits”:多少次命中。通过这个参数我们可以查看到Query Cache 的基本效果; ● “Qcache_inserts”:多少次未命中然后插入。通过“Qcache_hits”和“Qcache_inserts”两个参数我们就可以算出Query Cache 的命中率了: Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts ); ● “Qcache_lowmem_prunes”:多少条Query 因为内存不足而被清除出Query Cache。通过“Qcache_lowmem_prunes”和“Qcache_free_memory”相互结合,能够更清楚的了解到我们系统中Query Cache 的内存大小是否真的足够,是否非常频繁的出现因为内存不足而有Query 被换出 ● “Qcache_not_cached”:因为query_cache_type 的设置或者不能被cache 的Query 的数量; ● “Qcache_queries_in_cache”:当前Query Cache 中cache 的Query 数量; ● “Qcache_total_blocks”:当前Query Cache 中的block 数量;
By admin
read more(1)Ubuntu Server修改IP
配置文件地址 /etc/network/interfaces
使用编辑器打开
加入以下语句:
auto eth0 iface eth0 inet static address 192.168.1.11 #IP地址 netmask 255.255.255.0 #子网掩码 gateway 192.168.1.1 #网关
(2)Ubuntu Server修改DNS
配置文件地址 /etc/resolv.conf
使用编辑器打开
改为如下内容:
search localdomain nameserver 202.96.128.86 希望修改成的DNS nameserver 202.96.128.166 备用DNS
(3)Ubuntu Server最后一步,也是最重要的一步。
在rc.local里加入这个重启网络配置的命令:
sudo /etc/init.d/networking restart
** (4) 设置主机名称(hostname)**
查看当前主机的主机名称:
sudo /bin/hostname
修改名称:
sudo /bin/hostname 新的名字
By admin
read more一. 安装jdk 参考:
二. 建立JIRA数据库
mysql>create database jiradb character set utf8; mysql>grant all on jiradb.* to `jira`@`localhost` identified by ‘jira’;
三.JIRA 安装
wget http://wpc.29c4.edgecastcdn.net/8029C4/downloads/software/jira/downloads/atlassian-jira-enterprise-4.2.4-b591-standalone.tar.gz tar zxvf atlassian-jira-enterprise-4.2.4-b591-standalone.tar.gz mv atlassian-jira-enterprise-4.2.4-b591-standalone /usr/local/jira
创建jira.home文件夹
mkdir -p /usr/local/jira_home
修改vi /usr/local/jira/atlassian-jira/WEB-INF/classes/jira-application.properties 文件,指定jira.home = 路径.要使用绝对路径.
jira.home = /usr/local/jira_home
注:jira.home文件夹不可以设置为jira根目录及其子目录,jira动态运行时使用和产生的文件都会放在这
修改vi /usr/local/jira/conf/server.xml文件,修改成如下几项:
driverClassName=”com.mysql.jdbc.Driver” username=”jira” password=”jira” url=”jdbc:mysql://localhost/jiradb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8” maxActive=”20″ validationQuery=”select 1″
上面username和password是jira使用的mysql数据库用户名和密码.
为了避免与自带的tomcat与原来的tomcat冲突,可以把server.xml里的8080端口改成 8081,删除以下两行
minEvictableIdleTimeMillis= “4000” timeBetweenEvictionRunsMillis=”5000″
修改vi /usr/local/jira/atlassian-jira/WEB-INF/classes/entityengine.xml文件
查找datasource name
将其中的hsql改成mysql 数据库类型
hsql” 改为: mysql“
By admin
read morec语言有三种链接,外部链接,内部链接和无链接。
外部链接:对构成程序的所有文件可用,如函数和全局变量具有外部链接。 内部链接:仅在声明他们的文件中是已知的。如声明为static的文件域具有内部链接。 无连接:仅在自己的块中已知,其它地方没有办法访问,如局部变量。
extern主要作用是:声明在程序的其它地方使用外部链接声明的对象。 声明:表述对象的名称和类型。 定义:为对象分配存储空间。
例如:
int main(void) { extern int a, b; printf(“%d %d”, a, b); getch(); return 0; }
/* 全局变量定义到了main之后 */
int a = 10, b = 20; 程序输出10 20。
通过extern声明变量a和b,可以在a和b定义之前使用,编译器不会提示错误。
extern最重要的用途是多文件程序,c允许程序分散在多个文件中,分别编译,链接到一起。 我们在devc++中新建立一个c工程,然后在添新建一个单元保存名称为cunclx3.c
main.c的程序代码:
#include #include int x,y; int main(int argc, char *argv[]) { x=100; y=10; printf(“in main x is %d and y is %dn”,x,y); fun(); getch(); system(“PAUSE”); return 0; }
cunclx3.c的程序代码是:
extern int x,y; void fun(void) { x/=y; y/=2; printf(“in fun x is %d and y is %dn”,x,y); }
By admin
read morewindow平台下的redis dll文件下载: https://github.com/char101/phpredis/downloads
Redis 根据 5 种不同的数据类型来操作数据对象:
String(字符串) Sets(集合) zsets( 排序后的sets集合) List(列表) hash(哈稀)
Command
Parameters
Description
SET
key value
Set a key to a string value
GET
key
Return the string value of the key
GETSET
key value
Set a key to a string returning the old value of the key
MGET
key1 key2 … keyN
Multi-get, return the strings values of the keys
SETNX
key
value Set a key to a string value if the key does not exist
By admin
read more在一般用户下执行sudo命令提示xxx is not in the sudoers file. This incident will be reported.解决方法:
$whereis sudoers /etc/sudoers
有时候我们只需要执行一条root权限的命令也要su到root,是不是有些不方便?这时可以用sudo代替。默认新建的用户不在sudo组,需要编辑/etc/sudoers文件将用户加入,该文件只能使用visudo命令,
首先需要切换到root, su – (注意有- ,这和su是不同的,在用命令”su”的时候只是切换到root,但没有把root的环境变量传过去,还是当前用乎的环境变量,用”su -“命令将环境变量也一起带过去,就象和root登录一样)
然后 visudo 或者 vim /etc/sudoers, visudo 这个和vi的用法一样,由于可能会有人不太熟悉vi,所以简要说一下步骤
移动光标,到一行 root ALL=(ALL) ALL 的下一行,添加一行
your_user_name ALL=(ALL) ALL
然后保存退出!
这样就把自己加入了sudo组,可以使用sudo命令了。
your_user_name ALL=(ALL) NOPASSWD: ALL
By admin
read more