女主宣言

最近小编在项目中遇到了一个问题,打包的jar文件需要作为服务来使用,但是如何才能保证让jar文件开机自启动呢。小编使用的是Ubuntu的系统,所以查阅了相关资料之后,整理了此篇文章,供大家参考使用。在本文中,我们将使用示例服务包装器,在Ubuntu系统中以服务的方式运行JAR文件。包括自动启动和日志提示。

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

假设您有一个JAR文件,您需要将它作为一个服务运行。此外,您希望它在系统重新启动时自动启动。那我们该怎么做呢?

其实,Ubuntu有一个内置的机制来创建自定义服务,使它们能够在系统启动时作为服务启动/停止它们。在这篇文章中,我将分享一个简单而优雅的方法来为您的JAR文件创建一个服务包装器,以便您可以将它作为一个服务运行。我们开始吧。

1

创建一个服务

> sudo vim /etc/systemd/system/my-webapp.service

复制/粘贴以下内容到文件 /etc/systemd/system/my-webapp.service 中:

[Unit]

Description=My Webapp Java REST Service

[Service]

User=ubuntu

# The configuration file application.properties should be here:

#修改为你的工作目录

WorkingDirectory=/home/ubuntu/workspace

#要执行程序的路径

#调用jar文件的shell执行文件

fileExecStart=/home/ubuntu/workspace/my-webapp

SuccessExitStatus=143

TimeoutStopSec=10

Restart=on-failure

RestartSec=5

[Install]

WantedBy=multi-user.target

2

创建调用服务的Bash脚本

下面是调用JAR文件 my-webapp 的bash脚本:

#!/bin/sh

sudo /usr/bin/java -jar my-webapp-1.0-SNAPSHOT.jar server config.yml

不要忘记给脚本授予可执行权限:

$ sudo chmod u+x my-webapp

3

启动服务

$ sudo systemctl daemon-reload

$ sudo systemctl enable my-webapp.service

$ sudo systemctl start my-webapp

$ sudo systemctl status my-webapp

4

设置日志记录

服务设置好之后,我们还需要记录一下日志信息,以供有问题的时候查阅。这里我们使用Linux的新日志系统Journald。

简单介绍下Journald,它是Linux的新日志系统。Journald和systemd绑定。 Journald使用journalctl工具读取日志,默认参数下显示所有日志内容。journalctl不是本文的重点,感兴趣的读者可以自行查阅资料去了解。

我们简单介绍两个参数,使用 -f 选项可以查看实时日志,使用 -n 可以指定日志行数,使用 -u 指定特定单元(同--unit)。

首先执行该命令,

$ sudo journalctl --unit=my-webapp

如果想查看实时日志的话,可以执行:

$ sudo journalctl -f -n 1000 -u spinal-webapp

停止服务:

$ sudo systemctl stop my-webapp

总结

以上就是在Ubuntu下以服务的方式来运行我们java程序的方式。看似很简单的一个功能,但是可以做出不简单的事情,毕竟可以让我们使用其他语言来实现服务。本文以java程序为例,仅仅是抛砖引玉。感兴趣的读者可以去尝试运行一下php、python等语言,或者CentOS、Debian等操作系统。

扫描下方二维码了解更多内容

在Ubuntu上以服务方式运行Java程序相关推荐

  1. Windows以服务方式运行Java程序

    Windows以服务方式运行Java程序 Windows以服务方式运行Java程序 方式1:通过windows的startup自启动实现 方式2:通过winsw实现windows的服务注册与启动 Wi ...

  2. docker使用dockerfile方式运行java程序

    docker使用dockerfile方式运行java程序 1,下载基础java环境镜像java:8 2,创建文件夹并进入: mkdir dockerfile cd dockerfile 3,打包好的j ...

  3. 在Windows上以服务方式运行 MSOPenTech/Redis

    ServiceStack.Redis 使用教程里提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这个命题发生改变了,在Windows上也可以部署生产环境的Redis, ...

  4. javac的java扩展名_通过命令行方式运行Java程序时,使用的命令是javac,而且要求必须写出该文件的完整文件名,包括扩展名.java。 ( )...

    通过大戟科植物都有乳汁. 在启动Excel之初,命令名该应用程序自动为用户建立一个工作簿,名为 ( ). 默认状态下,行方行J序时须写在启动Excel之初,应用程序为用户建立的 book1 中,包含 ...

  5. java代码在u盘里面运行_在u盘安装有jdk,在win7系统上怎么运行java程序

    java程序的运行时需要环境的. java程序的运行环境就是JRE,你说的JDK其中也包含了JRE所以java程序可以运行,但是JDK中还包含有用于开发java程序所用到的工具,而这些JRE中是没有的 ...

  6. ultraedit运行java_如何在UltraEdit中编译和运行Java程序

    如何在UltraEdit中编译和运行Java程序 (2011-07-28 12:33:52) 标签: it 问题提出: 可以毫不夸张地说,JDK+UltraEdit是面向Java初学者的开发工具的绝配 ...

  7. 以Windows服务方式运行.NET Core程序

    原文:以Windows服务方式运行.NET Core程序 在之前一篇博客<以Windows服务方式运行ASP.NET Core程序>中我讲述了如何把ASP.NET Core程序作为Wind ...

  8. linux redhat 下让redis以服务方式运行

    1.从官网 下载 redis-2.8.9.tar.gz之后,将redis解压在/usr/local下,目录是redis-2.8.9,然后按照官网给出的办法安装redis即可. 2.安装完在redis- ...

  9. JJY本地服务器以服务方式运行不能读取消息文件

    1.问题描述 JJY主服务器采用Windows服务方式运行时,在读tb_0031消息对应的外部文件时失败.而在控制台方式下正常. 读文件失败的结果是单据没有发送,且错误类型是文件路径不存在(ERROR ...

最新文章

  1. python文件流习题解析
  2. notepad++的NppFTP插件远程连接linux操作系统
  3. [css] 举例说明实现圆角的方式有哪些?
  4. 链表每k个反转 java_K 个一组翻转链表
  5. UltraISO 制作ESXi 的 USB 安装盘
  6. 某道Pwn(格式化字符串漏洞)
  7. redis使用lua脚本
  8. 翰文进度计划软件横道图不显示文字_作为工程新人总是加班?这份工程软件+算量套表直接帮助你,共享...
  9. a标签下载文件直接打开的问题
  10. sqlite stmt
  11. 怎么把照片背景变成蓝色
  12. springboot2 druid监控控制台去掉下面的图片广告和powered by
  13. html清除span的text,使用jquery删除字符串中的span标签
  14. c++ 控制台游戏打砖块
  15. Py第四问 from test import test1 ImportError:cannot import name 'test1'
  16. iguana::json/xml 序列化框架
  17. 如何学计算机打字,新手学习计算机打字全文阅读
  18. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training 详解
  19. 送别贴:《李兴》 秋风为落叶所破歌!
  20. Tungsten Fabric(6):部署更高版本的TF

热门文章

  1. [转贴]网页及其控件的触发事件
  2. Python学习笔记之元组
  3. VUE自学日志04-Data Property 和方法
  4. SpringCloud微服务注册调用入门-路由网关
  5. Spring整合Quartz实现定时任务
  6. SpringMVC controller与页面之间的传值
  7. 调节pycharm字体大_字体美化大师里的字体推荐
  8. 注册Nocos配置中心失败:Could not resolve placeholder ‘config.info‘ in value “${config.info}
  9. 伪数组转化真数组_ES6 数组方法
  10. 听云CTO访谈:解读现代应用性能管理(APM)技术