之前使用的nginx启动脚本交互提示信息不全,使用起来不太方便。浏览nginx wiwk时看到一个启动脚本,想尝试一下。
脚本地址:http://wiki.nginx.org/RedHatNginxInitScript
配置好参数和启动脚本权限后启动nginx使用时报如下错误。
/etc/init.d/nginx start grep:无法识别的选项“--prefix=/usr/local/nginx.base” 用法: grep [选项]... PATTERN [FILE]... 试用‘grep --help’来获得更多信息。 useradd:无法识别的选项“--prefix=/usr/local/nginx.base”
细看启动脚本,找到这段内容。
make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done }
脚本每次都会调用nginx -V,取得编译时用--user指定的用户名。如果指定的用户不存在,则会创建该用户。还会根据编译的参数创建临时目录,并且修改权限。没有考虑未使用--user指定用户的场景,我编译nginx时没有加--user参数,就报错了。
重新编译了nginx,添加--user参数,指定用户以后正常了。这个启动脚本考虑的情况较多,交互提示较之前的更为人性化,效果不错。如果应用场景不允许重新编译nginx,可以直接跳过 make_dirs() 这个函数,在 # make required directories 上面加入一行 return 1 即可。
附本人nginx编译参数,系统是CentOS 6.3。
./configure --prefix=/usr/local/nginx.base \ --user=www \ --group=www \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_realip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-mail --with-mail_ssl_module \ --http-client-body-temp-path=/usr/local/nginx.base/tmp/client \ --http-proxy-temp-path=/usr/local/nginx.base/tmp/proxy \ --http-fastcgi-temp-path=/usr/local/nginx.base/tmp/fastcgi \ --http-uwsgi-temp-path=/usr/local/nginx.base/tmp/uwsgi \ --http-scgi-temp-path=/usr/local/nginx.base/tmp/scgi
iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT # 先把所有规则打开,则否ssh可能直接断掉 iptables -F iptables -X # 清除已有规则 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 先把ssh端口加上 iptables -P INPUT DROP iptables -P FORWARD DROP # 设置INPUT和FORWARD为封锁 iptables -A INPUT -i lo -j ACCEPT # 开启本地环路,使得ping 127.0.0.1这样的包以通过。php-fpm的http://127.0.0.1:9000可以使用 iptables -A INPUT -p icmp -j ACCEPT # 允许其它机器ping这台服务器 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许自己发送包的返回通信,不开启这个,机器上面使用ping www.google.com这样的无法拼通 iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开放web端口 /etc/init.d/iptables save # 保存设置 /etc/init.d/iptables restart # 重启iptables
自己使用vim编辑文件的时候,经常有需求将NERDTree定位到当前文件的目录,用了一点时间映射了一个组合快捷键,分享一下。
代码如下:
nn <silent><F2> :exec("NERDTree ".expand('%:h'))<CR>
在做web开发的时候,最头疼的就是处理各种浏览器兼容。尤其是ie低版本的兼容。于是各种 css hack层出不穷。类似 _ * \9 \0一类的,功能是实现的,却让本来写得很整齐的 css 代码变得乱糟糟的。其实用ie的条件注释就可以很简单的解决处理这些问题。
示例:
<!DOCTYPE html> <html> <!--[if lt IE 7]><html class="ie6"><![endif]--> <head> <meta charset="utf-8"> <title>css hack</title> <style> .test {height: 40px; background: blue;} .ie6 .test {background: red;} </style> </head> <body> <p class="test"></p> </body> </html>
前几天维护公司项目,给一个弹出层添加box-shadow效果,在ie9中效果无法显示,搜索出的结果多为更改doctype声明。页面本身使用html5声明,不存在冲突,调试了半天找出原因,弹出层外框为table默认添加了border-collapse: collapse的样式,因为这个样式导致box-shadow无法生效,修改为border-collapse: separate后解决。
示例代码:
<!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <table style="border-collapse: collapse"> <tr> <td> <div style="box-shadow:0 0 50px rgba(0, 0, 0, 0.5); width: 200px; height: 200px; border: 1px solid #CCC;"> </div> </td> </tr> </table> <table> <tr> <td> <div style="box-shadow:0 0 50px rgba(0, 0, 0, 0.5); width: 200px; height: 200px; border: 1px solid #CCC;"> </div> </td> </tr> </table> </body> </html>
工作中用makefile执行打包、压缩、转换等功能,一个需求涉及到多层相对路径嵌套,于是想到将相对路径转换为绝对路径。百度谷歌数遍,找到一曲径通幽的方法。
PUBLICDIR = $(shell cd ../public; pwd)
*2012年11月16日更新
经依云大大提点,又上网搜索了一下Makefile相关函数。Makefile自带有两个函数可以得到绝对路径。
1. realpath 函数获取文件名序列中存在的文件和目录的真实路径,会判断文件和目录是否存在,如果不存在,则返回空。
2. abspath 函数获取文件名序列中存在的文件和目录的真实路径,函数不会检查文件或者目录是否存在。
示例:
PUBLICDIR = $(abspath ../public; pwd)
经本人测试,realpath abspath 能跨过软链接,获取文件的真实路径。
例如:
ln -s /usr/local/www /www
Makefile:
WWWDIR = $(abspath /www)
test:
echo $(WWWDIR) #output /usr/local/www
make test #output /usr/local/www
一个偶尔的情况,需要清空 quickfix 列表,百度+谷歌试了多个关键字,未找到结果。最后在google上面搜"vim clean quickfix"终于找到结果。方法如下:
:call setqflist([])
设置一个空的quickfix列表替换到现在的quickfix列表。
项目开发中,有时需要添加一些本地的过滤文件,不提交到仓库中。可以采用以下方式
1.git config core.excludesfile .localgitignore
2.创建 .localgitignore 文件中添加需要过滤的内容
3.在默认的 .gitignore 文件中过滤 .localgitignore
Fedora17上能找到的PHP最低版本为5.4.x。因公司项目开发较早,仅能在上5.3.x上面正常运行,所以php采用编译方式安装,nginx、mysql使用源来安装。
1.安装nginx、mysql并设置自动启
2.安装基础库
3.下载源代码包
4.编译
cd
/usr/local/src
tar
-zxvf APC-3.1.9.tgz
cd
APC-3.1.9
/usr/local/php/bin/phpize
.
/configure
--
enable
-apc --
enable
-apc-mmap --with-php-config=
/usr/local/php/bin/php-config
make
make
install
参考链接:http://solf.me/compile-nginx-php-mysql-on-centos-lnmp/
以当前刚刚安装完成的 Fedora17 为例:
1.安装 wget
sudo yum install swget
2.添加网易镜像源
cd /etc/yum.repos.d
sudo wget http://mirrors.163.com/.help/fedora-163.repo
sudo wget http://mirrors.163.com/.help/fedora-updates-163.repo
sudo yum makecache
3.更新至最新
sudo yum update
*目前更新大约会下载 400M 左右的更新补丁,需要一段时间,请耐心等待。
*如果敲入 sudo 执行命令时提示 "user is not in the sudoers file. This incident will be reported." 说明安装的时候没有勾选 "Add to Administrators group"。使用以下方法即可解决。
su - #会提示输入密码,在此处输入安装时填写的root用户密码
visudo #一个vi编辑界面 查找"root ALL=(ALL) ALL"在下面添加一行 "user ALL=(ALL) ALL" user是你的用户名。
:wq #保存并退出
exit #退出root帐户
附:
网易开源地址 http://mirrors.163.com/
Fedora源说明 http://mirrors.163.com/.help/fedora.html