【任务笔记】创建windows操作系统下的服务进程,并随操作系统启动自动开始执行
2014-02-27 11:31
615 查看
这个任务名称写的有点儿长,简单来说就是类似于linux系统下的守护进程。在windows系统中,被称为服务进程,可以在服务列表中查看、开启、关闭。
JAVA中其实进程的概念并不强烈,更多的接触到的是线程。而实现这个守护进程,其实用到的也是线程。还有一个工具JavaService。
步骤如下:
1、建立两个类:一个负责控制线程的启停,一个就是运行的线程(代码简单,直接用txt写,javac一下就行)
2、把JavaService的解压路径加入到path
这步也可以直接把JavaService复制到MyService.class那个目录里
3、然后就打开cmd命令,跳转至当前目录,执行如下语句
JavaService.exe -install TJS "%JAVA_HOME%/jre/bin/server/jvm.dll" -Xmx128m -Djava.class.path=%CLASSPATH%;D:\javaTest -start MyService -method startService -stop MyService -method stopService -out "%CD%/out.log" -err "%CD%/err.log" -current "%CD%"
标红那里相当重要!因为必须在-Djava.class.path后加上你的类所在目录才行。不然就会在启动时出现启动失败,找不到类这样的错误。网上有资料说在最后加个-auto,我是执行失败,而且没有auto也能开机自启。求解释~
TJS是TestJavaService,也就是这个服务进程显示的进程名称
现在创建好了,启动方式有两种:
a、在命令行输入net start TJS
b、重启电脑(建议试试,这样可以比较直观的看到确实是开机自动运行的)
然后在out.log里就可以看到输出的结果了
在服务列表中也可以看到
不想要了也可以销毁:JavaService -uninstall TJS
所以要保证你的进程名称是唯一滴
关于每个命令的详细含义,运行机制神马的我就不过多的赘述了,网上都有。
笔记还是要有个笔记的样子才好
JAVA中其实进程的概念并不强烈,更多的接触到的是线程。而实现这个守护进程,其实用到的也是线程。还有一个工具JavaService。
步骤如下:
1、建立两个类:一个负责控制线程的启停,一个就是运行的线程(代码简单,直接用txt写,javac一下就行)
import java.util.*; public class MyService { private static Thread thread = null; private static Service service = null; /** * 退出服务方法(该方法必须有参数 String [] args) * * @param args */ public static void stopService(String[] args) { System.out.println("停止服务"); service.setRunFlag(false); } /** * 启动服务方法(该方法必须有参数 String [] args) * * @param args */ public static void startService(String[] args) { System.out.println("启动服务"); // 产生服务线程 service = new Service(); thread = new Thread(); try { // 将服务线程设定为用户线程,以避免StartService方法结束后线程退出 thread.setDaemon(false); if (thread.isDaemon()) { System.out.println("成功设定线程为用户线程!"); } thread.start(); service.run();//这句一定要有啊。我查资料的时候就因为没这句,怎么都不能执行o(╯□╰)o所以要避免“盲目崇拜” } catch (Exception e) { System.out.println("设定失败!"); } } } class Service implements Runnable { private boolean runFlag = true; /** * 设定服务线程运行标志值 */ public synchronized void setRunFlag(boolean runFlag) { this.runFlag = runFlag; } /** * 取得服务线程运行标志值 */ private synchronized boolean getRunFlag() { return runFlag; } @Override public void run() { System.out.println("服务线程开始运行。。。"); while (getRunFlag()) { /* * 获取系统时间 */ Calendar cal = Calendar.getInstance(); long mis = cal.getTimeInMillis(); System.out.println("当前时间:" + mis); try { Thread.sleep(1000*300); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("服务线程结束运行。。。"); } }
2、把JavaService的解压路径加入到path
这步也可以直接把JavaService复制到MyService.class那个目录里
3、然后就打开cmd命令,跳转至当前目录,执行如下语句
JavaService.exe -install TJS "%JAVA_HOME%/jre/bin/server/jvm.dll" -Xmx128m -Djava.class.path=%CLASSPATH%;D:\javaTest -start MyService -method startService -stop MyService -method stopService -out "%CD%/out.log" -err "%CD%/err.log" -current "%CD%"
标红那里相当重要!因为必须在-Djava.class.path后加上你的类所在目录才行。不然就会在启动时出现启动失败,找不到类这样的错误。网上有资料说在最后加个-auto,我是执行失败,而且没有auto也能开机自启。求解释~
TJS是TestJavaService,也就是这个服务进程显示的进程名称
现在创建好了,启动方式有两种:
a、在命令行输入net start TJS
b、重启电脑(建议试试,这样可以比较直观的看到确实是开机自动运行的)
然后在out.log里就可以看到输出的结果了
在服务列表中也可以看到
不想要了也可以销毁:JavaService -uninstall TJS
所以要保证你的进程名称是唯一滴
关于每个命令的详细含义,运行机制神马的我就不过多的赘述了,网上都有。
笔记还是要有个笔记的样子才好
相关文章推荐
- centos7用shell创建守护进程,并设置为系统服务,开机自动启动
- Linux服务器守护进程+自动启动+服务配置笔记
- 第六章:iOS恶意软件和后门 ——6.2 后台任务,守护进程和启动服务
- C#创建简单的windows服务项目--定时执行任务
- C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
- Linux系统下Oracle的自动启动服务创建
- 批处理启动服务进程后自身自动退出
- windows下使用sc创建服务 配置自动启动
- 操作系统学习笔记(35)--创建新进程并调度
- Linux系统下Oracle的自动启动服务创建
- 使用YUM安装并启动MySQL服务后,MySQL进程会自动在进程日志中打印root用户的初始密码
- 在weblogic中设置启动时自动定时执行的任务 分享
- Linux操作系统分析(2)- 进程的创建与可执行程序的加载
- 请用Shell编程来实现:当输入不同的选择时,执行不同的操作,如:输入start 开始启动应用程序myfiles,输入stop时,关闭myfiles,输入status时,查看myfiles进程,否则执
- 数据仓库自动抽取:通过 SQL Server 企业管理器中的数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务
- Spring 服务启动 自动执行(ApplicationListener)
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
- 如何为一个服务进程创建监控,即使出core也能自动重启
- serv-u无法自动启动:无法开始服务器!服务器执行缺少
- Linux操作系统分析(2)- 进程的创建与可执行程序的加载