Nginx 自动启动脚本/重启脚本 suny

本文用于介绍安装完Nginx后,如何注册为Linux的服务,使之可以开机自动启动。在CentOS应用成功。

第一步
先运行命令关闭nginx
#sudo kill `cat /usr/local/nginx/logs/nginx.pid`

第二步
#vi /etc/init.d/nginx
输入以下内容(如何使用vi命令请查阅:http://blog.javawind.net/p98

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac


保存退出

第三步
#chmod +x /etc/init.d/nginx

第四步
#/sbin/chkconfig nginx on

检查一下
#sudo /sbin/chkconfig --list nginx
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off

完成!
之后,就可以使用以下命令了
service nginx start
service nginx stop
service nginx restart
service nginx reload
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx reload

[转]Netty Channel 接口名词理解 cloudy

1.Channel
channel 是负责数据读,写的对象,有点类似于老的io里面的stream,他和stream的区别,channel是双向的
既可以write 也可以read,而stream要分outstream和inputstream。而且在NIO中用户不应该直接从channel中读写数据,
而是应该通过buffer,通过buffer再将数据读写到channel中。
一个channel 可以提供给用户下面几个信息
(1)channel的当前状态,比如open 还是closed
(2)ChannelConfig对象,表示channel的一些参数,比如bufferSize
(3)channel支持的所有i/o操作(比如read,write,connect.bind)以及ChannelPipeLine(下面解释)

2.ChannelConfig
channel的参数,以Map 数据结构来存储

3.ChannelEvent
ChannelEvent广义的认为Channel相关的事件,他是否分Upstream events和downstream events两大块,这里需要注意的,让是server为
主体的话,从client的数据到server的过程是Upstream;而server到client的数据传输过程叫downstream;而如果以client为主体
的话,从server到client的过程对client来说是Upstream,而client到server的过程对client来说就是downstream。
Upstream events包括:
messageReceived:信息被接受时 ---MessageEvent
exceptionCaught:产生异常时 ---ExceptionEvent
channelOpen:channel被开启时 ---ChannelStateEvent
channelClosed:channel被关闭时 ---ChannelStateEvent
channelBound:channel被开启并准备去连接但还未连接上的时候 ---ChannelStateEvent
channelUnbound:channel被开启不准备去连接时候 ---ChannelStateEvent
channelConnected:channel被连接上的时候 ---ChannelStateEvent
channelDisconnected:channel连接断开的时候 ---ChannelStateEvent
channelInterestChanged:Channel的interestOps被改变的时候 ------ChannelStateEvent
writeComplete:写到远程端完成的时候 --WriteCompletionEvent

...

[转]Netty 源码研究 cloudy

org.jboss.netty.bootstrap
本身 Netty 可以作为一个server存在的,因此他存在启动入口,他具有client启动,server启动以及connectionless 启动(比如UDP)
1.基类bootstrap:他包含ChannelFactory,ChannelPipeline,ChannelPipelineFactory。
ClientBootstrap: 有connect()方法
ConnectionlessBootstrap:有connect(),bind()方法
ServerBootstrap:有bind()方法

2.org.jboss.netty.buffer
netty自己提供了buffer 来取代nio 中的java.nio.ByteBuffer,他与nio中的byteBuffer相比,有下面的几个特点
1>可以根据自己需要自己定义buffer type
2>只是buffer type改变而不拷贝buffer的内容,这样可以减少开销
3>动态大小的buffer type 类似于stringbuffer
4>不需要调用flip()方法
5>更快的性能

3.org.jboss.netty.channel
channel的核心api,包括异步和事件驱动等各种传送接口
org.jboss.netty.channel.group
channel group,里面包含一系列open的channel

...

Eclipse is running in a JRE, but a JDK is required suny

给Eclipse安装了Maven插件后启动报错:
Eclipse is running in a JRE, but a JDK is required
Some Maven plugins may not work when importing projects or updating source folders.
javawind.net

解决方法:修改eclipse.ini,添加VM启动参数,指定eclipse启动使用的vm,修改后的文件内容如下:
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
C:\Program Files\Java\jdk1.6.0_22\bin\javaw.exe

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m

PostgreSQL 安装报错 Error reading file postgresql.conf 的解决办法 suny

最近的项目需要用到PostgreSQL数据库了,有点新鲜,但是安装很是让我郁闷,换了几个目录都是安装报错(最后一步报错:Problem running post-install step. Installation may not complete correctly > Error reading file C:/Program Files/PostgreSQL/8.4/data/postgresql.conf),经检查data目录是空的,即使安装完毕也是无法启动。

最后通过万能的百度得到解决方法:Please don´t select "default" in locale when you are using no-English version windows, or you will the following error

意思是说:非英文操作系统,选择地区的时候不能选择默认,应该选择其它,如下图所示:

...

iBatis改名myBatis,逐步脱离apache,投向Google Code suny

iBatis改名myBatis,逐步脱离apache,投向Google Code。

半自动的iBatis/myBatis ORM框架
      iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java和.net的持久层框架。

      使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的 Java对象,这一层与通过Hibernate 实现 ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而ibatis 则要求开发者编写具体的 SQL 语句。相对Hibernate等 “全自动”ORM机制而言,ibatis 以 SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM实现的一种有益补充,ibatis 的出现显得别具意义。

...

linux下vi命令详解 suny

vi命令详解
vi命令是unix下常用而重要命令,可在全屏幕方式下编辑一个或多个文件。若在vi执行时没有指定一个文件,那么vi命令会自动产生一个无名的空的工作文件。若指定的文件不存在,那么就按指定的文件名创建一个新的文件。若对文件的修改不保存的话,v i命令并不改变原来文件的内容。
注意:vi命令并不锁住所编辑的文件,因此多个用户可能在同时编辑一个文件,那么最后保存的文件版本将被保留。

下面是vi命令使用的一些选项及含义
-c sub-command 在对指定的文件编辑前,先执行指定的命令 sub-command .
-r filename 恢复指定的文件filename .
-R 将指定的文件以只读的方式放入编辑器中,这样不会保存对文件的任何修 改。
-y number 将编辑窗口的大小设为number行。

下面是vi编辑所处的三种模式:
命令模式 进入vi时所处的模式。在此模式下用户可输入各种子命令对进行*作,如删除行、粘贴行、移向下一个字、移向不同行等。
文本输入模式 在此模式下可以修改一行的内容并增添新行。在命令模式下键入a 、i 或c键可进入文本输入模式,按Escape键可返回命令模式。
命令项模式 在此模式下,可以通过子命令输入更多的参数。如:w子命令要求输入一文件名,”/”子命令要求输入一个查找项。用户使用Escape键返回命令模式。

下面是自命令模式下执行的,在同一行上移动的自命令
h 将光标左移一格。
l 将光标右移一格。
j 将光标下移一格。
k 将光标上移一格。
w 将光标移到下一个小字的前面。
W 将光标移到下一个大字的前面。
b 将光标移到前一个小字的前面。
B 将光标移到前一个大字的前面。
e 将光标移到下一个小字的后面。
E 将光标移到前一个大字的后面。
fc 把光标移到同一行的下一个c字符处。
Fc 把光标移到同一行的前一个c字符处。
tc 把光标移到同一行的下一个字符c的前一格。
Tc 把光标移到同一行的前一个字符c的后一格。
number| 把光标移到递number列上。

下面是命令模式下在行间移动的子命令
+或Enter 把光标移至下一行第一个非空白字符。
- 把光标移至上一行第一个非空白字符。
0 把光标移到当前行的第一个字符处。
$ 把光标移到当前行的最后一个字符处。
H 把光标移到屏幕最顶端一行。
L 把光标移到屏幕最底端一行。
M 把光标移到屏幕中间。

下面是命令模式下改变屏幕显示的子命令
z- 把当前行作为屏幕的最后一行,并重新显示屏幕。
z. 把当前行作为屏幕的中间一行,并重新显示屏幕。
Ctrl+l 重新显示屏幕当前内容。
/pattern/z- 寻找pattern的下一个位置,并把所在行设为屏幕的最后一行。

下面是在命令模式下用来显示页面的子命令
Ctrl + f向后滚一页。
Ctrl + d向后滚半页。
Ctrl + b向前滚一页。
Ctrl + u向前滚半页。
Ctrl + e屏幕向下滚一行。
Ctrl + y屏幕项上滚一行。

下面是在命令模式下用来查找字符串所使用的子命令
/pattern 向后寻找指定的pattern ,若遇到文件尾,则从头再开始。
?pattern 向前寻找指定的pattern ,若遇到文件头,则从尾再开始。
n 在上次指定的方向上,再次执行上次定义的查找。
N 在上次指定的方向的相反方向上,再次执行上次定义的查找。
/pattern/+number 将光标停在包含pattern的行后面第number行上。
/pattern/-number 将光标停在包含pattern的行前面第number行上。
% 移到匹配的”()”或”{}”上。

下面是在文本输入模式下用来输入文本的子命令(用户可在任何时候按Escape返回到命令模式):
a 在光标之后开始输入文本。
A在行尾开始输入文本。
i在光标之前开始输入文本。
I在行首第一个非空白字符前输入文本。
o在光标所在行后插入一空行。
O在光标所在行前插入一空行。

下面是在命令模式下改变文本所使用的子命令(用户可在任何的时候按Escape键返回到命令模式):
cc或S 修改一整行。
C 改变一行光标位置以后的部分。
cw 改变光标所在单词。
dd删除当前行。
D 删除光标所在行光标后面的内容。
dw删除光标所在的单词。
J 把下一行内容加到本行行尾。
rc把光符所在字符替换成c .
R 覆盖本行内容。
u恢复上一次的修改。
x删除光标所在的字符。
~ 改变光标所在出字符的大小写。
. 重复上一个*作。
>把当前行移到右边。

下面是用于文件中拷贝文本的字命令
p 将缓冲区内容取到光标所在行的下面一行。
P 将缓冲区内容取到光标所在行的上面一行。
”bd 将文本删除至有名缓冲区b .
”bp 张贴有名缓冲区b中内容。
yy把当前行放入缓冲区。
Y 把当前行放入缓冲区。
Yw把光标所在的单词放入缓冲区。

下面是用于保存文件的子命令
:w 回写修改后的文件。
:w filename 当filename不存在时,把修改后的文件存为文件filename ,当文件filename存在时,报错。
!w filename 如果文件filename存在时,把修改后的文件保存为文件filename .

下面列出了在vi编辑的多个文件之间切换所用的子命令
:n开始编辑vi激活的文件列表中的下一个文件。
:n filenames 指定将被编辑的新的文件列表。

下面列出了用于在当前文件和另外一个文件间切换的子命令
:e filename 使用filename激活vi (在vi中装入另一个文件filename)。
e!重新装入当前文件,若当前文件有改动,则丢弃以前的改动。
:e+filename 使用filename激活vi ,并从文件尾部开始编辑。
:e+number filename 使用filename激活vi ,并在第number行开始编辑。
:e# 开始编辑另外一个文件。

下面是在本文件中加入其他文件代码所使用的子命令
:r filename读取filename文件,并将其内容加到当前文件后。
:r ! command执行command文件,并将其输出加到当前文件后。

下面是vi中其他的子命令
ctrl+g 取得正在编辑文件的有关信息。
:sh启动sh ,从sh中返回可用exit或ctrl+d .
:! Command 执行命令command .
!!重新执行上次的:! Command子命令。
:q退出vi ,若用户对编辑的文件有所修改,系统不会让用户使用q命令退出。
:q!退出vi而不管是否对文件有改动。
ZZ或:wq 保存对文件的修改并退出vi .
用户可在一个特殊的文件.exrc中定义特殊的vi命令。在vi中使用这些命令时,必须在该命令前加上一个冒号( :) 。

ORA-00600: internal error code, arguments: [ttcgcshnd-1], [0], [], [], [], [], [], [] suny

      今天一个系统的Oracle数据库升级后,遇到如下的错误:ORA-00600: internal error code, arguments: [ttcgcshnd-1], [0], [], [], [], [], [], [] 
      百度告诉我:这个问题可能是Oracle的版本问题,可用ojdbc14.jar代替classes12.jar,因为从oracle 9.2之后,对jdbc 的驱动程序的命名将有所改变,JDK1.1,JDK1.2的驱动程序名(class12.jar)将不再改变,一直沿用下去,从JDK1.4开始驱动程序名将所有改变,例如:JDK1.4的驱动名为ojdbc14.jar 。JDK1.5的驱动名为ojdbc15.jar。
      重新下载了对应的驱动程序后,问题得到解决。

广州亚运期间免费无线上网方式 suny

      26日,亚运惠民无线宽带的免费上网热点及其免费上网的登录方式正式向社会公布。

      作为广州市政府“十大亚运惠民项目”的其中一项“重头戏”,从11月1日起至12月31日,市科技和信息化局会同中国电信广州分公司、中国移动 广州分公司、中国联通广州分公司等通信网络运营商,在广州市范围的三大运营商无线城市宽带网络覆盖地区,向全体广州市民、来穗的访客和游人,免费提供无线 宽带(WLAN)接入服务。

      记者了解到,这是国内首次大规模免费提供WLAN网络接入服务供市民和游客使用。亚运惠民无线城市宽带网络覆盖期间,广州将有5000个免费的 无线宽带上网热点,分布区域达到2532个。这些免费的无线宽带上网热点主要分布在亚运场馆、政府机关、商务写字楼、宾馆酒店、商业场所、医院等场所,具 体热点情况可登录市政府网站www.gz.gov.cn或登录市科技和信息化局网站www.gzsi.gov.cn查询。

...

CentOS定时同步系统时间 suny

      使用Linux.VPS第二天,发现系统时间不正确,手动修改或者同步正确一次后,运行半天发觉时间又快了几分钟,反正是运行得越久就越快,难道VPS穿越啦?

      和VPS管理员沟通无果,再上网搜索一番后,决定使用定时器自动同步时间算啦。

ssh执行命令:
#crontab -e
执行后加入一行:(和vi命令一样,按i进入编辑模式,Esc返回命令模式,:w保存修改,:q退出)
*/30 * * * * /usr/sbin/ntpdate us.pool.ntp.org >> /var/log/crontab.log 2>&1
数字30表示30分钟执行一次,保存和退出后,还需要重启定时任务器才行哦:
#service crond restart

...

Total:1331234567891011›|14 Pages