星期日, 31 一月 2010

apt-get update

今天在Ubuntu8下安装一个软件包,发现请求的软件包地址没有反应,说明这个地址已经失效了,如何去除这些无用的地址呢?使用

apt-get update 命令,这样就会下载的包地址列表,去掉无用的地址列表。

Posted by xiaojf at 4:27 下午 in 未分类

MySQL官网竟然去掉了社区版的下载链接!

今日访问 www.mysql.com,发现下载MySQL的地址没有了。欧盟批准Oracle收购Sun之后,看来Oracle要处理MySQL了。

LAMP的M命运如何,只能坐观其变了。

Posted by xiaojf at 12:41 下午 in 未分类

HTTP嗅探器-Free HTTP Sniffer

如果您想知道浏览器访问网站的情况,也就是HTTP协议的传输情况,那么你可以使用Free HTTP Sniffer。我们在浏览器上访问一个网站,由于每个网页都有很多的链接,从浏览器上我们很难查出到底访问了那些网站,使用Free HTTP Sinffer这个事情就简单了。

下载地址: http://www.cleanersoft.com/sniffer/free_http_sniffer.htm

安装后,需要重启计算机。不需要注册,只需点击Skip跳过即可。

国内可能封闭了下载地址,如果下载不了,可以使用一个HTTP代理。

 

Posted by xiaojf at 12:01 下午 in 未分类

没有MySQL还有PostgreSQL

MySQL现在已经归为Oracle,前景到底如何,很难预料。

没有了MySQL,还有PostgreSQL。

PostgreSQL具有商业数据库的特性而且开源,虽然入门比MySQL难,但是只要想学也是很快能入手的。

Posted by xiaojf at 11:06 上午 in 未分类

星期六, 30 一月 2010

Sun彻底成为历史!

访问Sun的网站被直接导向到Oracle的官网。

Posted by xiaojf at 7:05 下午 in 未分类

PostgreSQL中的模式

如果你以前只用过MySQL,你应该知道在库下是可以直接建表的,表的上级就是库。但是在PostgreSQL(及Oracle)中,还有模式(schema)。库下不能直接建表,而是在模式下建表,库、模式、表的从属关系是库>模式>表。

需要模式的原因有好多:

    ● 允许多个用户使用一个数据库而不会干扰其它用户。
    ● 把数据库对象组织成逻辑组,让它们更便于管理。
    ● 第三方的应用可以放在不同的模式中,这样它们就不会和其它对象的名字冲突。 

Posted by xiaojf at 6:45 下午 in 未分类

星期四, 28 一月 2010

Ubuntu8下安装phppgadmin

通过如下命令安装:

sudo apt-get install phppgadmin

安装后,有关phppgamin的配置文件在/etc/phppgadmin目录下。

apache.conf 用于将phppgamin添加到apache上的配置文件。

config.inc.php phppgadmin配置文件。

创建一个链接,让apache加载phppgadmin。

sudo ln -s /etc/phppgadmin/apache.conf /etc/apache2/conf.d/phppgadmin.conf

重启apache。

sudo /etc/init.d/apache2 restart

通过 http://ip地址/phppgadmin就可以访问了。

如果想通过帐号 postgres 登录。需要修改  config.inc.php文件,将

 $conf['extra_login_security'] = true;

改为 

 $conf['extra_login_security'] = false;

同时也要修改postgressql服务器的配置文件pg_hba.conf以允许postgres通过本地地址的TCP/IP连接到数据库就可以了。 例如:

host    all         postgres    0.0.0.0/0             md5

Posted by xiaojf at 5:56 下午 in 未分类

PostgreSQL两个初始表空间的物理位置

pg_default 对应 PGDATA/base目录。pg_global 对应 PGDATA/global目录。

具体信息参看 http://www.postgresql.org/docs/8.3/static/storage-file-layout.html

Posted by xiaojf at 12:34 下午 in 未分类

星期二, 26 一月 2010

Ubuntu8.04下PostgreSQL安装和配置

在控制如下命令:
sudo apt-get install postgresql
一旦安装完成,你应该按照自己的需求来配置它,虽然默认配置也是可用的。
默认情况下,TCP/IP连接数据库是被禁止的。PostgreSQL支持多种客户端验证方法。默认情况下,postgres和其它帐号使用IDENT验证方式。
如下假设你要启用客户端的TCP/IP连接和MD5验证。PostgreSQL配置文件存储在/etc/postgresql/<version>/main目录。如果你安装了PostgreSQL 8.3,那么配置文件就存储在/etc/postgresql/8.3/main目录。
配置ident验证,在/etc/postgresql/8.3/main/pg_ident.conf添加条目。

启用TCP/IP连接, 编辑文件/etc/postgresql/8.3/main/postgresql.conf。

找到 #listen_addresses = 'localhost' ,去掉前面的注释#号,变成:

listen_addresses = 'localhost'

如果想允许其它计算机连接到PostgreSQL服务器,使用对应的IP替换掉localhost,* 表示允许所有计算机。

如果你知道如何做的话,你完全可以编辑其它参数,具体内容可参看PostgreSQL文档。
现在你能连接到PostgreSQL了,下一步为postgres帐号设置一个密码。在终端控制台运行下面的命令连接到默认的PostgreSQL template数据库:

sudo -u postgres psql template1
上面的命令以用户postres连接到PostgreSQL的数据库template1。一旦你连接到PostgreSQL服务器,你会进入到SQL提示符下。你可以在psql交互提示下输入如下的SQL语句来为postgres用户设置一个密码:

ALTER USER postgres with encrypted password 'your_password';

设置密码之后, 编辑 /etc/postgresql/8.3/main/pg_hba.conf文件让postgres用户使用MD5认证:

local   all         postgres                          md5 sameuser

最后,你需要重启PostgreSQL服务器让配置生效:
sudo /etc/init.d/postgresql-8.3 restart

Posted by xiaojf at 8:37 下午 in 未分类

星期一, 25 一月 2010

FireFox 3.6支持文件上载的多选

以前文件上传,一次只能选择一个文件。FireFox3.6开始,一次可选择多个文件。

选择多个文件,只需在input中添加 multiple="true" 属性即可,写法如下:
  <input type="file" id="input" multiple="true" />

Posted by xiaojf at 11:24 上午 in 未分类

星期六, 23 一月 2010

Ubuntu下(8.04)的MySQL

MySQL是一个快速、多线程、多用户、稳健的SQL数据库服务器。
在Ubuntu下安装MySQL,可以在终端命令提示下输入如下命令:
sudo apt-get install mysql-server
在安装的过程中,会提示你输入MySQL root帐号的密码。
一旦安装完成,MySQL服务器会被自动启动。你可以使用如下的命令来检查MySQL服务器是否正在运行:
sudo netstat -tap | grep mysql
运行这个命令之后,你可能看到类似如下的内容:
tcp        0      0 localhost.localdomain:mysql           *:* LISTEN -
如果服务器没有正确运行,你也可以通过输入如下命令启动它:
sudo /etc/init.d/mysql restart
你可以编辑/etc/mysql/my.cnf文件来修改MySQL的基本设置(如日志、端口号等等),例如你可以配置网络主机来访问MySQL服务器,把bind_address修改成服务器的IP地址:
bind-address            = 192.168.0.5
修改配置时候,要重新启动MySQL:
sudo /etc/init.d/mysql restart
有关更多的MySQL信息请访问其官方网站。

Posted by xiaojf at 4:10 下午 in 未分类

Java它爹对Oracle收购Sun的心情

So long, old friend...

Posted by xiaojf at 11:43 上午 in 未分类

星期五, 22 一月 2010

Ubuntu8下Apache2的安装和配置

  Apache是Linux系统上应用最广泛的Web服务器,用来服务于客户端计算机请求的Web页面,客户端一般使用浏览器来请求和查看Web页面,例如FireFox、Opera、Mozilla等浏览器。Apache通常和MySQL数据库引擎、脚本语言(PHP、Python、Perl)一起使用。这种配置称为LAMP(Linux, Apache, MySQL and Perl/Python/PHP),是一个强大稳健的开发和部署Web应用程序的平台。

  在Ubuntu上安装Apache2,可在终端控制台输入如下命令:

 sudo apt-get install apache2

  Apache通过在纯文本配置文件中放置指令进行配置,首要的配置文件名称为apache2.conf,其它的配置文件可以使用Include指令进行添加,包含多个配置文件可以使用匹配符。任一指令都可以在这些配置文件中使用。在主配置文件中的更改只有在Apache2重启后才能生效。服务器也读取一个包含mime文档类型的文件,文件名称通过TypesConfig指令定义,默认的文件名为mime.types。

  默认的Apache2配置文件是 /etc/apache2/apache2.conf  。你可以编辑这个文件来配置Apache2服务器,你可以配置端口号、文档根目录、模块、日志文件和虚拟主机等等。

基本设置
本段介绍Apache2服务器基本的配置参数,关于更多的配置信息您可访问Apache网站。

●Apache2带来一个方便设置虚拟主机的默认配置。就是,它配置了一个默认的虚拟主机(使用VirtualHost指令),你可以使用和修改它,如果你有一个站点的话。如果你有多个虚拟主机,你可以使用它作为模板添加其它的虚拟主机。在这样的配置下,默认的虚拟主机就作为你的默认站点,如果用户输入的URL不能和任何虚拟主机的域名匹配,那么他看到的也是这个默认站点。如果要修改默认的虚拟主机,可以编辑/etc/apache2/sites-available/default文件。如果你想配置一个新的虚拟主机,把这个文件在复制出来一份,名字可以任意。例如sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite  。可以使用下面介绍的指令在新配置文件中配置这个新的站点。
●ServerAdmin指令可以指定一个邮件地址,用来通知服务器管理员,默认值是webmaster@localhost。这个值应该设置成您自己的邮件(如果你是服务器管理员)。如果站点有问题,Apache会发送一个包含错误信息的邮件给这个地址。这个指令在你的/etc/apache2/sites-available目录的配置文件中。
●Listen指令用来指定Apache2用来监听的端口,IP地址是可选的。如果没有指定IP地址,Apache2会监听当前系统的所有IP地址。默认的监听端口为80。如果改成127.0.0.1:80,那么Apache2仅能在本地访问,本机以外不能访问。默认的监听IP地址和端口在/etc/apache2/ports.conf文件中,你编辑这个文件来修改它。
●ServerName是可选的,用来指定你的站点服务于什么样的FSDN。默认的虚拟主机没有指定ServerName,如果发送的请求找不到匹配的ServerName,那就会访问默认的虚拟主机。如果你想使用域名ubunturocks.com作为主机的域名,那么在虚拟主机的配置文件中的ServerName指令的值就是ubunturocks.com。
把这个指令添加到你先前创建的主机配置文件中,例如 /etc/apache2/sites-available/mynewsite 。
[提示]     你也可能希望站点回应www.ubunturocks.com主机名,因为大多数用户已经习惯于www的前缀。可以使用ServerAlias指令,在这个指令中可以使用通配符,例如ServerAlias *.ubunturocks.com将会匹配任何以.ubunturocks.com为域名结尾的请求。
●DocumentRoot指令用来指定Apache在那里查找组成站点的文件。默认的位置是/var/www 。但是如果你去掉了/etc/apache2/apache2.conf文件中RedirectMatch指令的注释,那么请求会被重定向到/var/www/apache2-default这个默认站点。在你的虚拟主机配置文件中修改这个值来符合你的实际情况,记住要创建必要的目录。
[提示]/etc/apache2/sites-available目录不会被Apache2分析处理,是 /etc/apache2/sites-enabled 下的符号链接指向了“可用的”的站点。可以使用  a2ensite 命令创建这些符号链接。例如  sudo a2ensite mynewsite,这里假设你的站点配置文件是  /etc/apache2/sites-available/mynewsite .类似,有a2dissite工具用来禁用站点。

 

默认设置
本节介绍Apache2默认的配置值。例如,如果你添加了一个虚拟主机,在虚拟主机内部的设置值比主机主机指令外的具有高的优先级。如果在虚拟主机指令内部没有设置,则使用默认值。

●DirectoryIndex指令设置了当客户端在请求的目录名的末尾刻意添加一个"/"以表示请求该目录的索引时,服务器需要寻找的资源列表。Local-url(%已解码的)是一个相对于被请求目录的文档的URL(通常是那个目录中的一个文件)。可以指定多个URL,服务器将返回最先找到的那一个。若一个也没有找到,并且那个目录设置了Indexes选项,服务器将会自动产生一个那个目录中的资源列表。
在 /etc/apache2/apache2.conf 定义的DirectoryIndex默认值是 " index.html index.cgi index.pl index.php index.xhtml"。因此,如果Apache2在请求的目录中找到和其中任一个匹配,则返回匹配的第一个。
●ErrorDocument指令为Apache当指定的错误事件发生时访问的文件。例如,如果用户请求的资源不存在,一个404错误被返回,Apache2的默认配置是/usr/share/apache2/error/HTTP_NOT_FOUND.html.var。这个文件不在DocumentRoot指定的目录,但是/etc/apache2/apache2.conf中的Alias指令把/error目录重定向到/usr/share/apache2/error/目录。为了查看默认 ErrorDocument 指令的列表,可以使用命令: grep ErrorDocument /etc/apache2/apache2.conf
●默认情况下服务器把传输日志输出到 /var/log/apache2/access.log文件。你可以为每个虚拟主机进行单独的设置通过使用CustomLog指令,或者忽略它而使用/etc/apache2/apache2.conf中定义的默认值。 你也可以通过ErrorLog 指令指定错误日志文件位置,其默认值是 /var/log/apache2/error.log。这样就把传输日志和错误日志分开了,利于查找问题。你也可以使用LogLevel指定日志级别(默认是"warn") 和
使用LogFormat定义日志格式(默认值参看/etc/apache2/apache2.conf文件)。
●一些选项基于没目录而不是整个服务器。Options就是其中之一。一个Directory使用一对XML标签组成,如下:

<Directory /var/www/mynewsite>
...
</Directory>

在Directory指令段中Options指令可以下指令的一个或者多个,使用空格分隔:
  ○ExecCGI - 允许CGI脚本. 如果这个没有设置,CGI脚本不允许执行。
    [提示]大部分文件不是作为CGI脚本执行的。执行CGI脚本非常危险。CGI脚本应该在DocumentRoot指定的目录之外,而且只有指定的那个目录能执行CGI脚本。这是默认的,CGI脚本的默认位置是 /usr/lib/cgi-bin 。

  ○Includes - 服务器端包含。服务器端允许一个HTML文件包含其它的文件。详细信息请参看Apache2 SSI章节。
  ○IncludesNOEXEC - 允许服务器端包含,但是禁止了CGI脚本的 #exec 和 #include命令。
  ○Indexes - 显示一个目录内容的列表,如果DirectoryIndex指令没有在访问的目录中设置。
    [注意]由于安全原因,这个一般不会设置,更不能设置在 DocumentRoot 指定的目录中。使用这个选项要非常小心,除非你确实想让用户知道这个目录的全部内容。   

  ○Multiview - MultiViews查询是由Options指令的MultiViews选项激活的。如果服务器接收了一个对/some/dir/foo的请求,而/some/dir/foo并不存在,则服务器会查找这个目录下所有的 foo.* 文件,并有效地伪造一个说明这些 foo.* 文件的类型表,假定客户可能请求的一个,把他们指定为这个类型的媒体类型及内容编码。最终选择其中最符合客户请求的文档,返回给客户。默认被禁用了。
  ○SymLinksIfOwnerMatch - 服务器仅在符号连接与其目的目录或文件的拥有者具有相同的uid时才使用它。


 原文地址  https://help.ubuntu.com/8.04/serverguide/C/httpd.html

Posted by xiaojf at 2:33 下午 in 未分类

JSP空间内存限制参数的说明

大部分JSP空间都有最大内存这个参数,这个内存是指那些程序占用的内存呢? 它就是Java虚拟机所能使用的最大物理内存,对于Tomcat来说,一个Tomcat启动,就是启动了一个Java虚拟机。因此最大内存是Tomcat服务程序和用户程序共同占用的最大内存。单独的一个JSP/Servlet WEB程序所占用的具体内存量是不可测量的。

Posted by xiaojf at 7:06 上午 in 未分类

星期四, 21 一月 2010

Ubuntu8.04下Tomcat5.5默认安装分析

从Tomcat5.5的启动脚本 /etc/init.d/tomcat5.5 入手。

root@ubuntu8:~$ cat /etc/init.d/tomcat5.5
#!/bin/sh

set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=tomcat5.5 服务名称
DESC="Tomcat servlet engine" 描述
DAEMON=/usr/bin/jsvc 守护程序
CATALINA_HOME=/usr/share/$NAME Tomat安装的位置,也就是/usr/share/tomcat5.5目录
DEFAULT=/etc/default/$NAME 配置文件,例如JAVA_HOME、Tomcat安装目录等可在这个文件中设置,此处就是/etc/default/tomcat5.5

if [ `id -u` -ne 0 ]; then
        echo "You need root privileges to run this script"
        exit 1
fi

# 确保tomcat在系统本地区域语言下运行
if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG
fi

. /lib/lsb/init-functions
. /etc/default/rcS

# 以下定义的变量可以被默认配置文件中的变量替换


# Tomcat进程的帐号
TOMCAT5_USER=tomcat55

# 第一个有效的路径被设置为 JAVA_HOME (如果 JAVA_HOME 在默认配置中定义)
JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm /usr/lib/j2sdk1.4-sun /usr/lib/j2sdk1.4-blackdown /usr/lib/j2se/1.4 /usr/lib/j2sdk1.4-ibm /usr/lib/j2sdk1.3-sun /usr/lib/j2sdk1.3-blackdown /usr/lib/jvm/java-gcj /usr/lib/kaffe"

# 搜索正确的JVM来使用
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done
export JAVA_HOME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME

# 是否使用java安全管理器? (yes/no)
TOMCAT5_SECURITY=yes

# 关闭所有web程序的超时时间
TOMCAT5_SHUTDOWN=30

# 以上定义的变量可以被默认配置文件中的变量替换

# 利用默认配置文件的设置替换以前的设置
if [ -f "$DEFAULT" ]; then
        . "$DEFAULT"
fi

test -f $DAEMON || exit 0

[ -z "$TOMCAT5_USER" ] && TOMCAT5_USER=tomcat55

# 检查是否使用了 gij
gij=no
"$JAVA_HOME/bin/java" -version 2>&1 | grep -q "^gij (GNU libgcj)" && gij=yes

# gij 仍然不支持一个安全管理器 (参看 bug #399595)
if [ "$gij" = "yes" ]; then
    echo -e "The java-gcj-compat-dev environment currently doesn't\nsupport a security manager. See README.Debian." | logger -p daemon.warning -t $NAME
fi

# 设置 java.awt.headless=true如果JAVA_OPTS中没有设置它,这样JDK1.4+没有X11显示也能工作。这里也改变了64M的默认堆内存,设置最大为128M

if [ -z "$JAVA_OPTS" ]; then
        JAVA_OPTS="-Djava.awt.headless=true -Xmx128M"
fi

JAVA_OPTS="$JAVA_OPTS -Djava.endorsed.dirs=$CATALINA_HOME/common/endorsed -Dcatalina.base=$CATALINA_BASE -Dcatalina.home=$CATALINA_HOME -Djava.io.tmpdir=$CATALINA_BASE/temp"

# Set the JSP compiler if set in the tomcat5.5.default file
if [ -n "$JSP_COMPILER" ]; then
        JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=$JSP_COMPILER"
fi

if [ "$TOMCAT5_SECURITY" = "yes" ]; then
        JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy=$CATALINA_BASE/conf/catalina.policy"
fi

# 如果运行在gij下禁用juli LogManager (参看 bug #395167)
if [ "$gij" != "yes" ]; then
        JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
fi

#定义其它的变量
CATALINA_PID="/var/run/$NAME.pid"
BOOTSTRAP_CLASS=org.apache.catalina.startup.Bootstrap
JSVC_CLASSPATH="/usr/share/java/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar"

# 查找Java安全套接字扩展-Java Secure Sockets Extension (JSSE) JARs
if [ -z "${JSSE_HOME}" -a -r "${JAVA_HOME}/jre/lib/jsse.jar" ]; then
    JSSE_HOME="${JAVA_HOME}/jre/"
fi
export JSSE_HOME

........省略 ........

exit 0

 

Posted by xiaojf at 9:27 上午 in 未分类

Commons Daemon 之 jsvc


实际上仅支持类UNIX平台。源代码在A src/native/unix subdirectory子目录。在将来将利用APR来提供更方便的平台支持。

从源代码构建

在UNIX系统下构建你需要:

    ● GNU AutoConf (最低版本 2.53)
    ● 一个ANSI-C兼容的编译器 (推荐GCC)
    ● GNU Make
    ● JAVA2平台兼容的SDK

你需要构建 "configure" 程序:

sh support/buildconf.sh

结果类似如下:

support/buildconf.sh
support/buildconf.sh: configure script generated successfully

一旦生成了configure脚本,可进行后续步骤。

从一个发布版中构建

在UNIX系统下构建你需要:

    ● 一个ANSI-C兼容的编译器 (推荐GCC)
    ● GNU Make
    ● JAVA2平台兼容的SDK
    
你必须指定JAVA_HOME或者使用 --with-java=<dir> 参数指定JDK,再或使用JAVA_HOME环境变量指定JDK安装位置。例如:

./configure --with-java=/usr/java

或者

export JAVA_HOME
./configure

如果你的操作系统支持,configure会顺利运行,否则会报错。构建二进制程序和库:

make

这个生成可执行文件jsvc。

启动 jsvc

查看可用的jsvc参数仅需:

./jsvc -help
Usage: jsvc [-options] class [args...]

Where options include:

    -jvm <JVM name>
        use a specific Java Virtual Machine. Available JVMs: 'client' 'server'
    -cp / -classpath <directories and zip/jar files>
        set search path for service classes and resouces
    -home <directory>
        设置JDK或者JRE的安装路径 (或者设置 JAVA_HOME 环境变量)
    -version
        show the current Java environment version (to check correctness of -home and -jvm. Implies -nodetach)
    -help / -?
        显示帮助信息 (implies -nodetach)
    -nodetach
        don't detach from parent process and become a daemon
    -debug
        详细输出调试信息
    -check
        only check service (implies -nodetach)
    -user <user>
        运行守护程序的用户(默认是当前用户)
    -verbose[:class|gc|jni]
        启用详细输出
    -outfile </full/path/to/file>
        Location for output from stdout (defaults to /dev/null) Use the value '&2' to simulate '1>&2'
    -errfile </full/path/to/file>
        Location for output from stderr (defaults to /dev/null) Use the value '&1' to simulate '2>&1'
    -pidfile </full/path/to/file>
       jsvc的pid文件位置(默认 /var/run/jsvc.pid)
    -D<name>=<value>
        设置java系统的属性
    -X<option>
        设置虚拟机参数
    -wait <waittime>
        服务启动的等待时间,是10的倍数 (最小10)
    -stop
        使用-pidfile参数指定的文件停止服务

使用 jsvc

有两种方式来使用jsvc:一种是实现了Daemon接口的类或者调用一个类包含需要的方法。例如,Tomcat-4.1.x使用了Daemon接口,Tomcat-5.0.x提供了一个包含可被jsvc直接调用的方法的类。

使用 Daemon 接口

    ● 写一个实现Daemon接口的类 (MyClass).
    ● 打包在jar文件中 (my.jar).
    ● 如下调用jsvc:

      ./jsvc -cp commons-daemon.jar:my.jar MyClass
        

直接调用

你可以写一个实现如下方法的类:

    ● void load(String[] arguments): 此处打开配置文件、创建跟踪文件、创建ServerSocket和线程
    ● void start(): 启动线程,接收连接
    ● void stop(): 通知线程激活run(), 关闭ServerSockets
    ● void destroy(): 销毁在init()中创建的对象

打包在jar文件中:

./jsvc -cp commons-daemon.jar:my.jar MyClass

jsvc如何工作

Jsvc使用3个进程: 启动进程、主控进程、被控进程。被控进程也就是主要的java线程,如果JVM崩溃,主控进程会在以后几分钟启动它。jsvc是一个守护进程,它可以以root帐号启动,-user参数允许降权到一个非特权帐号。当使用了 -wait 参数,启动进程会等待直到控制进程准备好了,否则生成控制进程即返回。

Forks in commons-daemon

启动进程:

main()
{
  fork()
  parent: wait_child(), wait until JAVA service started when the child says "I am ready".
  child: controller process.
}

主控进程:

  while (fork()) {
    parent: wait_for_child.
      if exited and restart needed continue
      else exit.
    child: exit(child()). controlled process.
  }

被控进程:

In child(): controlled process.
  init_JVM().
  load_service().
  start_service().
  say "I am ready"
  wait for signal or pool for stop
  stop_service().
  destroy_service().
  destroy_JVM().
  exit (with different codes so that parent knows if it has to restart us).

注意: 主控进程使用信号停止被控进程。

降级用户

在linux上使用兼容的setuid()/setgid()。在其他的unix上使用 setgid/initgroups 。如下:

/* as root */
init_JVM().
load_service. /*  java_load() calls the load method */
downgrade user (set_caps() or set_user_group())
/* as the user $USER (from -user $USER parameter) */
umask()
start_service. /* java_start() calls the start method */


Posted by xiaojf at 2:00 上午 in 未分类

Commons Daemon 之 procrun

Procrun是一套让Java应用程序运行在WIN#@下更容易的库和应用程序。

Procrun服务应用程序

Prunsrv一个让应用程序作为服务运行的服务程序,它能转换任一应用程序作为服务运行。

Procrun监视器应用程序

Prunmgr是一个可视化应用程序,用来监视和配置procrun服务。

可用的命令行选项:

//ES//     编辑服务的配置     这是一个默认的操作. 如果没有提供选项,可执行文件被命名为 服务名称W.exe 来调用
//MS//     服务监视器     把图标放在系统托盘中

命令行参数

每一个命令行指令的格式为 //XX//服务名

可用的命令行选项为:

//TS//     运行服务为一个控制台应用程序,这是默认的操作。可执行文件被命名为 服务名称W.exe 来调用
//RS//     运行服务     仅从服务管理器中调用
//SS//     停止服务     
//US//     更新服务参数    
//IS//     安装服务    
//DS//     删除服务,如果正在运行会停止它

命令行参数

每一个命令行参数的前缀为 -- 。如果命令行前缀为  ++ ,那么参数会被附加在已经存在的选项后面。如果提供了相同名称的环境变量作为命令行参数,但是前缀为PR_,则具有优先权。例如:

set PR_CLASSPATH=xx.jar

等同于使用

--Classpath=xx.jar

作为命令行参数。

参数名称     默认     描述
--Description         服务名称的描述 (最大1024字符)
--DisplayName     服务名称     显示的服务名称
--Install     procrun.exe //RS//ServiceName     安装镜像
--Startup     人工     服务启动模式,自动或者人工
--Type         服务  类型可以是交互式的桌面程序。使用和这个选项仅限于本地系统帐号
--DependsOn         列出服务的依赖关系。依赖的服务使用 # 或者 ; 字符分割
--Environment         列出对服务提供的环境变量,格式为 key=value 。使用 # 或者 ; 字符分割
--User         运行程序使用的的用户帐号。它仅用来StartMode模式的java或者exe,让程序作为服务运行在没有作为服务帐号的权限下运行。
--Password         --User 指定的帐号的口令
--ServiceUser         指定服务运行的帐号名称。格式为 DomainName\UserName 。服务进程以这个帐号登录,如果帐号属于内建的域,可以使用 .\UserName 的格式
--ServicePassword         通过 --ServiceUser 指定的帐号的口令
--JavaHome     JAVA_HOME     设定一个和JAVA_HOME环境变量不同的 JAVA_HOME
--Jvm     自动     使用自动或者指定全路径的jvm.dll 。你可以使用环境变量
--JvmOptions     -Xrs     以 -D 或者 -X 格式列出传递给JVM的参数。这些选项使用 # 或者 ; 字符分割。如果你需要嵌入 # 或者 ; 字符,请使用单引号把它括起来。
--Classpath         设置java类路径
--JvmMs         初始内存池,单位 MB
--JvmMx         最大内存池,单位 MB
--JvmSs         线程堆栈,单位 KB
--StartImage         将要启动的可执行程序
--StartPath         启动程序工作路径
--StartClass         用来启动的类
--StartParams         列出传递给 StartImage 或者 StartClass 的参数。参数使用 # 或者 ; 分割。
--StartMethod     Main     如果使用了不是main的方法名称
--StartMode     executable     可以是一个 jvm java或者exe程序
--StopImage         可执行程序用来发出停止服务的信号
--StopPath         停止程序的工作路径
--StopClass         停止服务的类
--StopParams         列出传递给 StopImage 或者 StopClass 的参数。参数使用 # 或者 ; 分割。
--StopMethod     Main     如果使用了不是main的方法名称
--StopMode     executable     可以是一个 jvm java或者exe程序
--StopTimeout     No Timeout     定义一个时长,单位秒,procrun等待服务优雅地退出
--LogPath     working path     日志路径
--LogPrefix     jakarta_service     定义服务日志文件名
--LogLevel     INFO     定义日志级别error 、 info 、 warn 、 debug
--StdOutput         重定向的stdout文件名称
--StdError         重定向的stderr文件名称


安装服务

你需要使用 //IS// 参数

安装名为 'TestService'的服务

prunsrv //IS//TestService --DisplayName="Test Service" \--Install=prunsrv.exe --Jvm=auto --StartMode=jvm --StopMode=jvm \--StartClass=org.apache.SomeStartClass --StartParams=arg1;arg2;arg3 \--StopClass=org.apache.SomeStopClass --StopParams=arg1#arg2 \

更新服务

你需要使用 //US// 参数

更新名为 'TestService'的服务

prunsrv //US//TestService --Description="Some Dummy Test Service" \--Startup=auto --Classpath=%CLASSPATH%;test.jar

移除服务

你需要使用 //DS// 参数。如果服务正在运行,它会停止它,然后删除。

移除名为 'TestService' 的服务
prunsrv //DS//TestService

调试服务

运行服务为控制台模式,你需要使用 //TS// 参数。服务可以使用CTRL+C or CTRL+BREAK中断。如果你把prunsrv.exe改名为testservice.exe,你仅需要执行the testservice.exe,这个命令模式被默认执行。

在控制台模式运行名为 'TestService'的服务

prunsrv //TS//TestService [additional arguments]

Posted by xiaojf at 1:27 上午 in 未分类

星期三, 20 一月 2010

Commons Daemon ( procrun or jsvc )

  从1994年以来java已经发展为一个有效的开发工具,不仅仅是applets和客户端应用程序,还有可靠稳定的服务器端程序。JAva平台的主要的缺点当今还是依靠一个单一的入口点:( the public static void  main(String[]) )来启动Java应用程序。使用单点入口对于客户端程序是一个有效的解决方案,一个用户可以交互地使用命令来退出应用程序(它可以调用System.exit(int)方法来中断虚拟机进程),但是在非交互式的应用程序下,例如服务器端程序,当前没有有效的方法通知虚拟机即将临近的关机。一个Java编写的服务器程序在能关闭虚拟机进程之前必须执行一些任务,例如一个servlet容器,在VM进程关闭之前,会话需要序列化到磁盘,web应用程序需要销毁。对于这个问题的一般解决方法是创建一个ServerSocket,接收发布的特定消息。当接收到信息,服务器程序执行关闭所有需要关闭的操作,最后调用System.exit方法退出虚拟机。然而,这种方法有一定的不利和风险,例如系统范围的关机,虚拟机进程会被操作系统直接关闭,而不会通知正在运行的服务器程序。或者,如果一个攻击这发现了发送到服务器需要的信息,使用一种方法把这样的信息发送给正在运行的服务器,他能轻易地中断一个服务器的操作,绕过了在操作系统上应用的安全限制。大多数多用户操作系统已经有启动和停止服务器程序的方法,在unix下非交互的服务器程序称为“daemons”,操作系统使用一套特定的信号控制它。在Windows下,这样的程序称为“服务”,通过调用定义在程序中特定的函数来控制它。虽然这些处理问题的方法不同,两种情况下,操作系统都能通知服务器程序即将到来的关机,应用程序能够在进程被销毁之前执行特定的任务。


Daemon包含两部分. 一个是用C编写的到操作系统的接口,另一个是用Java编写的Daemon API。

实际上win32和类UNIX平台都支持,win32平台使用procrun,类UNIX平台使用jsvc。

最初的Java classes来自Jakarta Tomcat 4.0项目。

Daemon组件推荐的包名称为 org.apache.commons.daemon 。

 

Posted by xiaojf at 11:37 下午 in 未分类

AMD64 Ubuntu 8.04 LTS Server 下vsftpd正常运行

 

AMD64 Ubuntu 9.10 Server 下vsftpd不能正常运行,原因未知!

Posted by xiaojf at 1:17 上午 in 未分类

星期二, 19 一月 2010

新网互联域名解析出现问题导致部分JSP空间无法访问

  今晚7点左右,部分用户反映JSP空间无法访问,经检查,服务器正常,原来是域名无法解析。无法解析的域名的服务商为北京新网互联,其主站 www.dns.com.cn 也无法访问。大约半个小时后,逐步恢复正常,处理速度还是很快。

  接近春节,乱事不少啊。例如百度被黑、谷歌要推出、两个新网的域名接连出现问题,看来互联网越来越不平静了。

Posted by xiaojf at 9:27 下午 in 未分类

SQL Server 2008 导出数据库操作位置

Posted by xiaojf at 2:28 下午 in 未分类

JQS(Java Quick Starter)插件导致FireFox崩溃!

最近使用FireFox,经常崩溃。发现是由于JQS插件引起,禁用后问题不再出现。

 

Posted by xiaojf at 12:23 下午 in 未分类

64位Ubuntu 9.10 Server下vsftpd的问题

按部就班安装了vsftpd,但是连接不正常。

root@ubuntu91s:/# ftp localhost
Connected to localhost.
220 Welcome to Ubuntu FTP service.
Name (localhost:test): test
331 Please specify the password.
Password:
421 Service not available, remote server has closed connection
Login failed.
No control connection for command: No such file or directory
ftp>

21端口是打开的,而且曾经正常过一次,设置了几个简单的参数重启vsftpd后,又不正常了,即使将参数改回原来的初始设置也不行,怪!

root@ubuntu91s:/home# nmap -sV -sS localhost

Starting Nmap 5.00 ( http://nmap.org ) at 2010-01-19 09:21 CST
Warning: Hostname localhost resolves to 2 IPs. Using 127.0.0.1.
Interesting ports on localhost (127.0.0.1):
Not shown: 987 closed ports
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp
22/tcp   open  ssh         OpenSSH 5.1p1 Debian 6ubuntu2 (protocol 2.0)
25/tcp   open  smtp        Postfix smtpd
80/tcp   open  http        Apache httpd 2.2.12 ((Ubuntu))
110/tcp  open  pop3        Dovecot pop3d
139/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)
143/tcp  open  imap        Dovecot imapd
445/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)
993/tcp  open  ssl/imap    Dovecot imapd
995/tcp  open  ssl/pop3    Dovecot pop3d
3306/tcp open  mysql       MySQL 5.1.37-1ubuntu5
5432/tcp open  postgresql  PostgreSQL DB
8080/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
1 service unrecognized despite returning data. If you know the service/version,
SF-Port21-TCP:V=5.00%I=7%D=1/19%Time=4B550926%P=x86_64-unknown-linux-gnu%r
SF:(NULL,24,"220\x20Welcome\x20to\x20Ubuntu\x20FTP\x20service\.\r\n")%r(Ge
SF:nericLines,24,"220\x20Welcome\x20to\x20Ubuntu\x20FTP\x20service\.\r\n")
SF:%r(Help,4A,"220\x20Welcome\x20to\x20Ubuntu\x20FTP\x20service\.\r\n530\x
SF:20Please\x20login\x20with\x20USER\x20and\x20PASS\.\r\n")%r(SMBProgNeg,2
SF:4,"220\x20Welcome\x20to\x20Ubuntu\x20FTP\x20service\.\r\n");
Service Info: Hosts: Ubuntu,  ubuntu91s.ubuntu91s; OS: Linux

Service detection performed. Please report any incorrect results at http://nmap.org
Nmap done: 1 IP address (1 host up) scanned in 23.66 seconds

Posted by xiaojf at 10:05 上午 in 未分类

Ubuntu 8.04 LTS Server

LTS = Long Term Support 长期支持

Ubuntu Server一般支持是3年,LTS的支持是5年。生产环境建议选择相应版本的LTS版本。

Posted by xiaojf at 9:56 上午 in 未分类

星期一, 18 一月 2010

LVM命令学习

物理卷是由一个磁盘的分区组成,卷组由物理卷组成, 在卷组上就可以创建逻辑分区。

lvm> pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda1
  VG Name               ubuntu91s
  PV Size               19.76 GB / not usable 2.26 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              5057
  Free PE               3
  Allocated PE          5054
  PV UUID               iYwM32-zhHi-1i7m-PQWp-jqmk-M1vf-Rnddt8

lvm> vgdisplay
  --- Volume group ---
  VG Name               ubuntu91s
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               19.75 GB
  PE Size               4.00 MB
  Total PE              5057
  Alloc PE / Size       5054 / 19.74 GB
  Free  PE / Size       3 / 12.00 MB
  VG UUID               O4caw0-TWWl-H8MY-HemO-l2K3-uel5-71N3QB

lvm> lvdisplay
  --- Logical volume ---
  LV Name                /dev/ubuntu91s/root
  VG Name                ubuntu91s
  LV UUID                zViJJc-BfaE-kdpA-dFHa-elFV-qZH7-3CktYo
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                18.88 GB
  Current LE             4833
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Name                /dev/ubuntu91s/swap_1
  VG Name                ubuntu91s
  LV UUID                BE4cUs-tyts-Uq7j-ezCc-uLef-M10B-yGn1DN
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                884.00 MB
  Current LE             221
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

Posted by xiaojf at 11:17 上午 in 未分类

星期日, 17 一月 2010

commons fileUpload的进度监听接口ProgressListener

这个接口定义了一个方法:

void update(long pBytesRead,
            long pContentLength,
            int pItems)

    Updates the listeners status information(更新监听器信息).

    参数:
        pBytesRead - The total number of bytes, which have been read so far(到目前已经读取的字节数).
        pContentLength - The total number of bytes, which are being read(总共需读取的字节数,应该是所有文件的大小之和). May be -1, if this number is unknown(如果是-1,说明所有文件的大小是未知的).
        pItems - The number of the field, which is currently being read(当前正在读取的文件字段序号,也就是正在读取第几个文件). (0 = no item so far, 1 = first item is being read, ...)

前两个参数很好理解,第三个参数只表明第几个文件的序号,如果想知道这个文件的名称该如何处理呢?

Posted by xiaojf at 3:17 上午 in 未分类

Sun Download Manager - Sun的下载管理器

  下载大的文件,离不开下载软件。Windows下免费的下载软件,不是搞大量广告,就是偷偷上载你文件,例如快车的广告和迅雷的无耻。那么你可以尝试一下Sun Download Manager,当前最新版本为2.0,需要安装Java。

http://cn.sun.com/download/sdm/download.jsp

 

  为何流氓软件在我们这片土壤能茁壮成长,那些善良的软件却无人问津呢?

Posted by xiaojf at 12:39 上午 in 未分类

星期六, 16 一月 2010

www.SunFreeWare.com - Solaris上运行的开源软件

www.SunFreeWare.com

这个网站提供了大量运行于Sun Solaris系统的开源软件,都是编译好的,可以直接下载安装。

Posted by xiaojf at 11:39 下午 in 未分类

谷歌起用了四大发明LOGO

谷歌要撤出中国市场,不再提供阉割过的google.cn搜索结果!真的吗?

Posted by xiaojf at 1:26 下午 in 未分类

星期二, 12 一月 2010

百度(www.baidu.com)无法访问!!!!

今日上午10点左右,发现百度也不能访问了!临近虎年,互联网真是不稳定啊!

看了新闻,从7点左右就无法访问了,这么长时间没有解决,问题严重啊,百度处理严重事故的能力也真是问题。

域名解析遭黑客篡改,导致百度无法被访问,这是百度到目前遭受的最严重、时间最长、影响最大的攻击。

Posted by xiaojf at 10:13 上午 in 未分类

星期一, 11 一月 2010

JSP空间的FTP有一个很大的core文件

在Solaris 10的JSP空间的FTP下,如果Tomcat进程非正常退出,可能产生这个文件。这个文件用来调试应用程序,找出发生这个问题的原因。这个文件完全可以删除,不会造成什么影响。

Posted by xiaojf at 1:59 下午 in 未分类

Tomcat已经发展10年了!

今天访问Tomcat网站,看到了这个图标,才知道这个大脸猫已经10岁多了。对于JSP开发者,对她基本都有很深厚的感情,她的出现让我们开发JSP网站不在依赖商业WEB服务器。

Posted by xiaojf at 11:25 上午 in 未分类

CSDN.net 不能访问了!

难道也被整顿了?还是其它原因?

Posted by xiaojf at 11:00 上午 in 未分类

SQL Server 2008 服务器主体 "某用户" 无法在当前安全上下文下访问数据库 "某数据库"。 (.Net SqlClient Data Provider)

JSP空间用户在使用Express版本的SQL Server Management Studio的连接SQL Server 2008时出现此问题,使用企业版的SQL Server Management Studio连接是正常的。

解决问题的原文:http://support.microsoft.com/kb/956214/en-us/

如果满足下列条件,则会出现此问题:

    ● 您没有管理凭据。 此外,您没有访问某些数据库 SQL Server 2008 中。
    ● 修改列在数据库文件夹的 对象资源管理器详细信息 页上的列表。 此外,包括以下各列中至少一个:
          ○ 大小 (MB)
          ○ 数据空间使用 (KB)
          ○ 索引空间使用 (KB)
          ○ 空间可用 (KB)
          ○ 默认文件组
          ○ 邮件主机
          ○ 主文件路径
      备注
          ○ 默认情况下,这些列不在数据库文件夹的 对象资源管理器详细信息 页上可见。 要在 对象资源管理器详细信息 页上查看这些列,用鼠标右键单击列标题,然后单击列。 您没有访问某些数据库时,这些列会导致该问题。
          ○ 排序规则 列包含在数据库文件夹中显示默认的列。
          ○ 为数据库启用了 自动关闭 的选项时,排序规则 列会导致该问题。 此外,您没有访问数据库的权限。


要解决此问题,请按照下列步骤操作:

   1. 单击 开始 指向 程序 ,指向 Microsoft SQL Server 2008 ,然后依次和 SQL Server Management Studio 。
   2. 在 连接到服务器 对话框单击服务器所需在 服务器类型 列表中,服务器中键入名称 服务器名称 框,然后单击 连接 。
   3. 在对象资源管理器,单击 数据库 文件夹。
   4. 对象资源管理器详细信息 本页右键单击该列标题,然后单击 重置视图 。

      请注意 如果 对象资源管理器详细信息 页不可见,按 F 7。 或者,单击在 视图 菜单上的 对象资源管理器详细信息 。
   5. 在对象资源管理器,右键单击 数据库 文件夹,然后单击 刷新 。
   6. 在 文件 菜单中上, 单击 退出 。

请注意 如果仍然收到在执行步骤 1 到 6 后"症状"部分中提到的该错误消息错误消息可能会造成 排序规则 列。 在这种情况下,请按照下列步骤操作:

   1. 单击 开始 指向 程序 ,指向 Microsoft SQL Server 2008 ,然后依次和 SQL Server Management Studio 。
   2. 在 连接到服务器 对话框单击服务器所需在 服务器类型 列表中,服务器中键入名称 服务器名称 框,然后单击 连接 。
   3. 在对象资源管理器,单击 数据库 文件夹。
   4. 对象资源管理器详细信息 本页右键单击该列标题,然后单击以清除 排序规则 复选框。
   5. 在对象资源管理器,右键单击 数据库 文件夹,然后单击 刷新 。
   6. 在 文件 菜单中上, 单击 退出 。

 

Posted by xiaojf at 10:12 上午 in 未分类

« First  « Prev   1 2 3 4 5   Next »  Last »
« 一月 »
星期日星期一星期二星期三星期四星期五星期六
     12
3456789
10111213141516
17181920212223
24252627282930
31