java编写service详细笔记 - centos7.2实战笔记(windows类似就不在重复了)
java编写service详细笔记 - centos7.2实战笔记(windows类似就不在重复了)
目标效果(命令行启动服务):
service xxxxd start #启动服务
service xxxxd stop #停止服务
详细步骤
一、编译并安装jsvc
官网 https://commons.apache.org/daemon/
1)建立目录
cd /
mkdir jsvc
2)下载jsvc源码
wget https://mirrors.tuna.tsinghua.edu.cn/apache//commons/daemon/source/commons-daemon-1.0.15-src.tar.gz
3)解压源码
tar zxvf commons-daemon-1.0.15-src.tar.gz
4)编译源码
编译器为了省事,先给目录下所有文件设置可执行权限
chmod -R 777 *
cd /jsvc/commons-daemon-1.0.15-src/src/native/unix
./support/buildconf.sh
./configure --with-java=/opt/jdk #注 /opt/jdk 是我的java安装目录
make #编译
5)编译后
会在 /jsvc/commons-daemon-1.0.15-src/src/native/unix 生成 可执行文件jsvc
设置一下执行权限
chmod 777 /jsvc/commons-daemon-1.0.15-src/src/native/unix/jsvc
二、实战编写一个小小的javasocket服务,代码如下:
1)test_service.java
========================================================================
package com.xiaobaijiuxing.jsvc;
import org.apache.commons.daemon.Daemon;
import org.apache.commons.daemon.DaemonContext;
import org.apache.commons.daemon.DaemonInitException;
/**
* @date 2017-5-2
* @author 小白救星
*/
public class test_service implements Daemon {
public static boolean isstop = false;
public static void main(String args[]) {
System.out.println("Hello World2!");
}
/* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#destroy()
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("JsvcTest destory method...");
}
/* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#init(org.apache.commons.daemon.DaemonContext)
*/
@Override
public void init(DaemonContext ctx) throws DaemonInitException, Exception {
// TODO Auto-generated method stub
System.out.println("JsvcTest init method..." + ctx.toString());
}
/* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#start()
*/
@Override
public void start() throws Exception {
// TODO Auto-generated method stub
int i =0;
//while (!isstop)
//{
Server server = new Server();
server.init();
System.out.println("JsvcTest start method..." + i);
i = i +1;
//}
}
/* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#stop()
*/
@Override
public void stop() throws Exception {
// TODO Auto-generated method stub
isstop = true;
System.out.println("JsvcTest stop method...");
}
}
========================================================================
2)Server.java
========================================================================
package com.xiaobaijiuxing.jsvc;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static final int PORT = 12345;//监听的端口号
//public static void main(String[] args) {
// System.out.println("服务器启动...\n");
// Server server = new Server();
// server.init();
//}
public void init() {
System.out.println("服务器启动...\n");
try {
ServerSocket serverSocket = new ServerSocket(PORT);
//while (true) {
// 一旦有堵塞, 则表示服务器与客户端获得了连接
Socket client = serverSocket.accept();
// 处理这次连接
new HandlerThread(client);
//}
} catch (Exception e) {
System.out.println("服务器异常: " + e.getMessage());
}
}
private class HandlerThread implements Runnable {
private Socket socket;
public HandlerThread(Socket client) {
socket = client;
new Thread(this).start();
}
public void run() {
try {
// 读取客户端数据
DataInputStream input = new DataInputStream(socket.getInputStream());
String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException
// 处理客户端数据
System.out.println("客户端发过来的内容:" + clientInputStr);
// 向客户端回复信息
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.print("请输入:\t");
// 发送键盘输入的一行
String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.writeUTF(s);
out.close();
input.close();
} catch (Exception e) {
System.out.println("服务器 run 异常: " + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (Exception e) {
socket = null;
System.out.println("服务端 finally 异常:" + e.getMessage());
}
}
}
}
}
}
========================================================================
三、将我们的java代码打包到test_service.jar
我采用ant打包,因为我感觉ant最简单,写代码只要用好了EditPlus+ant就可以,不需要其它开发工具
1)ant编译配置文件build.xml
========================================================================
<?xml version="1.0" encoding="UTF-8" ?>
<project name="test_service" default="run" basedir=".">
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="doc.dir" value="doc"/>
<property name="test_services_jar" value="test_service.jar"/>
<property name="main.class" value="com.xiaobaijiuxing.jsvc.test_service"/>
<path id="lib_classpath">
<fileset dir="lib/">
<include name="*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac encoding="utf-8" srcdir="${src}" destdir="${dest}" includeantruntime="on">
<classpath refid="lib_classpath"/>
</javac>
</target>
<target name="build" depends="compile">
<jar encoding="utf-8" jarfile="${test_services_jar}" basedir="${dest}">
<manifest>
<!--<attribute name="Main-Class" value="${main.class}"/>-->
<attribute name="Class-Path" value="lib/commons-daemon-1.0.15.jar"/>
</manifest>
</jar>
</target>
<target name="run" depends="clean,build">
</target>
<target name="clean">
<delete dir="${dest}" />
<delete file="test_services_jar" />
</target>
<target name="rerun" depends="clean,run">
<ant target="clean" />
<ant target="run" />
</target>
<target name="createdoc">
<delete dir="${doc.dir}" />
<mkdir dir="${doc.dir}"/>
<javadoc destdir="${doc.dir}" encoding="UTF-8" docencoding="UTF-8">
<packageset dir="${src}">
<include name="**"/>
</packageset>
</javadoc>
</target>
</project>
========================================================================
2)编译生成test_service.jar包
命令行运行 ant回车即可
3)建立目录
mkdir /jsvc/commons-daemon-1.0.15-src/app
mkdir /jsvc/commons-daemon-1.0.15-src/log
mkdir /jsvc/commons-daemon-1.0.15-src/tmp
chmod -R 777 *
4)将编译出来的jar包及要用到的lib目录拷贝到 /jsvc/commons-daemon-1.0.15-src/app 目录下
app目录下是 test_service.jar
app/lib目录下是 commons-daemon-1.0.15.jar
四、编写linux centos7.2 service 脚本并运行
1)cd /etc/init.d/
2)vi testserviced #内容如下
========================================================================
#!/bin/sh
RETVAL=0
prog="jsvc"
JAVA_HOME=/opt/jdk
APP_HOME=/jsvc/commons-daemon-1.0.15-src/app
#jsvc所在的目录
DAEMON_HOME=/jsvc/commons-daemon-1.0.15-src/src/native/unix
APP_USER=root
TMP_DIR=/jsvc/commons-daemon-1.0.15-src/app/tmp
PID=/jsvc/commons-daemon-1.0.15-src/app/testserviced.pid
CLASSPATH=/jsvc/commons-daemon-1.0.15-src/app/test_service.jar:/jsvc/commons-daemon-1.0.15-src/app/lib/commons-daemon-1.0.15.jar
case "$1" in
start)
#echo $DAEMON_HOME
# Start Serivce
$DAEMON_HOME/jsvc -user $APP_USER -home $JAVA_HOME -Djava.io.tmpdir=$TMP_DIR -wait 5000 -pidfile $PID -outfile $APP_HOME/log/jsvc.out -errfile '&1' -cp $CLASSPATH com.jason.jsvc.test_service &
# To get a verbose JVM
#-verbose \
# To get a debug of jsvc.
#-debug \
exit $?
;;
stop)
#
# Stop Serivce
#
#$DAEMON_HOME/jsvc -stop -pidfile $PID com.jason.jsvc.test_service
exit $?
;;
*)
echo "Usage service testserviced start/stop"
exit 1;;
esac
:wq #保存
========================================================================
3)添加centos系统服务
chmod 777 /etc/init.d/testserviced
chkconfig --add testserviced
4)启动和关闭服务
service testserviced start
查看我们服务启动后的socket服务端口是否启动了监听
lsof -i:12345
返回结果:
[root@xiaobaijiuxing ~]# lsof -i:12345
[root@xiaobaijiuxing ~]# service testserviced start
[root@xiaobaijiuxing ~]# lsof -i:12345
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
jsvc 171926 root 9u IPv6 5672748 0t0 TCP *:italk (LISTEN)
service testserviced stop
五、大功告成
作者:小白救星 原创,未经许可可以随意转发
java编写service详细笔记 - centos7.2实战笔记(windows类似就不在重复了)的更多相关文章
- 《安卓网络编程》之第七篇 java编写Service程序
import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net. ...
- 实战WEB 服务器(JAVA编写WEB服务器)
实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报 分类: ...
- Python 1行代码实现文本分类(实战笔记),含代码详细说明及运行结果
Python 1行代码实现文本分类(实战笔记),含代码详细说明及运行结果 一.详细说明及代码 tc.py =============================================== ...
- Java虚拟机性能监控与调优实战
From: https://c.m.163.com/news/a/D7B0C6Q40511PFUO.html?spss=newsapp&fromhistory=1 Java虚拟机性能监控与调 ...
- linux配置java环境变量(详细)
linux配置java环境变量(详细) 本文完全引用自: http://www.cnblogs.com/samcn/archive/2011/03/16/1986248.html 一. 解压安装jdk ...
- delphi调用java编写的webservice
delphi调用java编写的webservice JAVApojo: public class GroupInfo implements Serializable{ private stati ...
- 15套java架构师大型分布式综合项目实战、千万高并发-视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
- RHEL7.0 Docker离线安装以及实战笔记
1.概述 最近在琢磨一个事--在RHEL 7.0系统上离线安装使用Docker.然后配置JAVAEE环境,发布Web服务.在网上查了资料,大多数是在线安装的,其他的要么是环境不同,要么资料包找不到了. ...
- 机器学习实战笔记-k-近邻算法
机器学习实战笔记-k-近邻算法 目录 1. k-近邻算法概述 2. 示例:使用k-近邻算法改进约会网站的配对效果 3. 示例:手写识别系统 4. 小结 本章介绍了<机器学习实战>这本书中的 ...
随机推荐
- 2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)
传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在 ...
- 搭建Idea授权服务器用于学习
我自己的搭建服务器http://doit.wenyule.top 懒得看教程或弄不好的小伙伴可以用我搭建的,在激活那选择服务器,输入我上面的地址,注意可以激活2018.2.1之前的.为了防止用的人太多 ...
- Linux服务器部署系列之三—DNS篇
网上介绍DNS的知识很多,在这里我就不再讲述DNS原理及做名词解释了.本篇我们将以一个实例为例来讲述DNS的配置,实验环境如下: 域名:guoxuemin.cn, 子域:shenzhen.guoxue ...
- spring mvc 文档哪里有
官方: http://docs.spring.io/spring/docs/4.2.0.RC1/spring-framework-reference/htmlsingle/#spring-web Th ...
- c# Clipboard.SetDataObject(bmp1) 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常
c# Clipboard.SetDataObject(bmp1) 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttri ...
- linux (centos 6.4)下编译安装git
是时候动手尝试下 Git 了,不过得先安装好它.有许多种安装方式,主要分为两种,一种是通过编译源代码来安装:另一种是使用为特定平台预编译好的安装包(yum install git). 若是条件允许,从 ...
- hbase使用MapReduce操作2(微博表实现)
package com.yjsj.weibo; import java.io.IOException; import java.util.ArrayList; import java.util.Ite ...
- MDX示例:求解中位数、四分位数(median、quartile)
一个人力资源咨询集团通过网络爬虫采集手段将多个知名招聘网站上发布的求职和招聘等信息准实时采集到自己的库里,形成一个数据量浩大的招聘信息库,跟踪全国招聘和求职的行业.工种.职位.待遇等信息,并通过商业智 ...
- [Zend Mail]发送中文名附件出现乱码解决方案
Zend Framework 1.0.* “=?UTF-8?B?”.base64_encode($title).“?=” 发送中文名附件,结果如图: 英文名附件,结果截图: 解决办法就是将中文文件名拼 ...
- VLC简介及使用说明
一.简介 VLC的全名是Video Lan Client,是一个开源的.跨平台的视频播放器.VLC支持大量的音视频传输.封装和编码格式,完整的功能特性列表可以在这里获得http://www.vi ...