精华内容
下载资源
问答
  • Linux启动java服务脚本

    2020-05-06 23:40:34
    在没有自动部署的环境下,如果调试java 服务,每次都需要kill掉之前的服务,然后再启动,虽然整个过程也只涉及如下三个命令,但是频繁调试时还是让人很崩溃的。 ps -ef | grep myjar#myjar为服务名 kill -9 123456 #...

    在没有自动部署的环境下,如果调试java 服务,每次都需要kill掉之前的服务,然后再启动,虽然整个过程也只涉及如下三个命令,但是频繁调试时还是让人很崩溃的。

    ps -ef | grep myjar#myjar为服务名
    kill -9 123456 #假设myjar的线程号为123456
    nohup java -jar -Xms1024m -Xms2048m myjar.jar & # 习惯使用nohup从后台启动。-Xms为jvm 参数,&不要漏了
    

    封装成shell 脚本如下,命名为run.sh:

    普通版

    jar包提前打好了,这里只需为此jar包定制特定的脚本

    #1,获取myjar的进程号
    PID=$(ps -ef|grep myjar| grep -v grep | awk '{print $2}')
    #2,启动myjar的函数
    start(){
            nohup java -jar -Xms1024m -Xms2048m myjar.jar -p -i &
    }
    #3,判断1中获取的PID是否存在,即判断myjar有没有启动
     if [ -z "$PID" ]
    then
    #4,日志
        echo "Sart the myjar directly "
    #5,myjar之前没有启动的话,这里直接调用start函数
        start
    else
    #6,myjar之前启动过且进程依然存活,则kill掉,然后调用start函数
        echo "kill the existing myjar process firstly."
        kill -9 $PID
        echo " $PID has been killed"
        start
    fi
    

    注: run.sh的权限需要设置成当前用户可以执行的状态,由于脚本中涉及到kill 命令,建议使用root权限执行。关于修改文件权限请学习chmod命令

    进阶版

    服务器上装有git,jar包通过mvn命令package,每次打包前是基于当前最新的代码,因此需要行执行git pull. 一般运维人员,不会将root权限赋予git, 所以需要普通用户去执行run,但run中的kill前需要加上sudo . 完整脚本如下:

    
    #get the pid
    PID=$(ps -ef|grep myjar| grep -v grep | awk '{print $2}')
    start(){
      echo "======Ready to build project======"
      mvn clean package -Dmaven.test.skip=true #是否跳过unit test,true 为跳过
      # mvn clean package -P uat -Dmaven.test.skip=true #是否跳过unit test,true 为跳过.
      #-P指的是profile,uat指的是测试环境,pom中配置了profile才需要加上
      #-P 环境
      echo "======Build finished, ready to run======"
      nohup /usr/java/bin/java -jar -Xms1024m -Xms2048m target/myjar.jar  &
      tail -f nohup.out
    }
    echo "======Ready to get latest code from repository======"
    git pull
    if [ -z "$PID" ]
    then
      echo "Sart the myjar directly "
      start
    else
      echo "kill the existing myjar process firstly."
      sudo kill -9 $PID # sudo一定要加
      echo " $PID has been killed"
      start
    fi
    
    

    下次启动时,进入到run.sh所在目录直接./run.sh,没有进入到所在目录则需要带上目录,例如./x/x/x/run.sh

    展开全文
  • Linux运行Java程序中文日志乱码 文章目录Linux运行Java程序中文日志乱码前言一、问题分析二、解决方案三、总结 前言 最近在开发一个Java程序的时候,打包好后丢上阿里云上运行,日志中的中文死活都报乱码,看了网上...

    Linux运行Java程序中文日志乱码

    前言

    最近在开发一个Java程序的时候,打包好后丢上阿里云上运行,日志中的中文死活都报乱码,看了网上好多文章发现说的都不全面,因此在这里记录一下最后的解决方案。


    一、问题分析

    首先分析一下Java代码是怎么从源代码阶段一直到在Linux上部署运行然后跑起来的。

    在这里插入图片描述

    如图可见jar包的运行是会经历以上三个阶段的,而这三个阶段中都会有不同的方法来指定编码集,只有三个阶段的编码集相同才不会导致中文乱码问题,下面来分析以下这三个阶段做了什么。

    1、Java源代码->Java字节码

    ​ 在编译阶段,使用javac命令将java源文件编译成.class字节码文件,编译编码默认采用系统编码,而windows平台一般是GBK,这就是为什么网上有些文章下面有人留言自己把后续运行jar编码集换成gbk就能正常显示的原因。

    2、JAVA字节码->JVM->操作系统

    ​ 在程序执行阶段JVM加载字节码文件,然后把类存放到方法区中,实际执行的时候JVM会执行方法区中的代码,当然前提是操作系统需要有Java环境,这一步使用java -jar指令来运行,执行时可以指定jar包运行编码集。

    3、操作系统->显示设备

    ​ 最后我们查看程序的执行情况,主要是通过查看日志的方式,这是要求我们的操作系统能够正常显示中文,即安装了中文字体,且编码集与上述步骤相同。


    二、解决方案

    下面以utf-8字符集为例来一个一个问题解决

    1、Java源代码->Java字节码指定编码集

    这里要分为两种情况,分为使用Maven打包以及使用javac生成字节码文件

    1. Maven打包,pom文件加入如下配置

      <properties>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      
    2. javac生成字节码文件

      javac -encoding utf-8 xxx.java
      

    2、JAVA字节码->JVM->操作系统

    1. java -jar运行jar包时加入如下配置

      java -Dfile.encoding=utf-8 -jar xxx.jar
      
    2. tomcat启动

      # 假如使用tomcat启动,需要去修改对应启动脚本的配置
      # 在daemon.sh和catalina.sh中加入以下代码
      JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=utf-8 -Dfile.encoding=utf-8 -Duser.language=zh_CN -Dsun.jnu.encoding=utf-8"
      

    3、操作系统->显示设备

    1. 前提检测

      我们在发现linux中程序日志乱码的时候首先要确定是服务器的问题还是上述步骤的问题,验证方法也很简单,创建一个中文名称的文件,然后使用ll命令查看文件名是否正常显示,显示正常则本地编码集能显示中文(但是还存在与上述设定编码集不一致问题),如果不行则需要切换系统编码集。

      # 创建文件
      touch 测试
      ## 查看文件信息
      ll
      

      如上图所示,这里直接不能显示中文,则需要切换系统编码集

    2. 系统编码集切换

      这里以utf-8为例,首先查看当前系统的编码集

      locale
      

    3. 下一步查看系统中是否有安装中文utf-8编码集

      locale -a | grep zh_CN.utf8
      

      我们能看到这里系统安装了,因此直接使用即可,如果没有执行以下指令安装

      yum install kde-l10n-Chinese 
      
    4. 更换本地编码集配置

      # 打开locale配置文件
      vi /etc/locale.conf
      # 替换里面的编码集设置
      LANG="zh_CN.utf8"
      # 配置文件生效
      source /etc/locale.conf
      

    5. 最后还需要考虑一下是否连接工具的终端编码有问题

      • Xshell

        文件->打开->选中会话->右键->属性->终端

        将编码改为 UTF-8 保存

      • MobaXterm

        选择sessions窗口中对应的连接右键->Edit session->Terminal settings->Terminal font settings

        将charset改成UTF-8 保存

    6. 至此日志文件便能正常显示。


    三、总结

    在解决这一问题的时候可以对上述提到的三个环节进行分析,查看字符集是否一致。此外,在解决其他问题时也一样,将问题拆解开来,逐个排查,问题便迎刃而解了。

    展开全文
  • 自己编写Java程序,注册为Linux Service服务,通过 service xxx start 启动后,发现日志文件中文乱码,如果不使用服务启动,则没有乱码。 出现此问题可能是系统环境变量设置不正确,也可能是服务启动工具没有添加...

    自己编写Java程序,注册为Linux Service服务,通过 service xxx start 启动后,发现日志文件中文乱码,如果不使用服务启动,则没有乱码。
    出现此问题可能是系统环境变量设置不正确,也可能是服务启动工具没有添加中文的设置,最终的结果导致以服务形式启动的程序输出的日志文件乱码,在操作系统本身支持中文的情况下 排查方法如下:

    1、首先查看自己系统中环境变量LANG的设置
    使用命令:echo $LANG,如下所示

    [root@localhost data]# echo $LANG
    zh_CN.UTF-8
    如果输出的不是以上的结果,则需要在 系统 profile文件中进行设置,步骤如下:

        vim /etc/profile
    
        在文件最后写入:
    
        export LANG=zh_CN.UTF-8
    
        保存后,重新加载 profile文件:source /etc/profile,重新查看LANG设置即可看到UTF-8设置。
    

    2、查看服务启动工具对环境变量的使用
    使用命令 :grep env /sbin/service
    在这里插入图片描述

    将LANG="$LANG" 配置在env -i 后面,最后的结果如下所示,操作过程:
    
    编辑service文件
    
    vim /sbin/service
    
    在env -i 后面加上 LANG="$LANG"  。
    
    添加后  重启操作系统
    
    重新运行服务即可解决 日志文件乱码的问题。
    
    展开全文
  • 笔者用的java原生的logger,添加日志功能后,本来可以正常作为service自动运行工作的,但是就启动不起来。 debian/ubuntu下使用journalctl -f -u <你的服务名>查看服务日志,发现: 报的是文件权限方面的问题...

    笔者用的java原生的logger,添加日志功能后,本来可以正常作为service自动运行工作的,但是就启动不起来。
    debian/ubuntu下使用journalctl -f -u <你的服务名>查看服务日志,发现:
    在这里插入图片描述

    报的是文件权限方面的问题,是因为我将日志写进了文件里。遂把服务停掉,尝试手动运行,又发现正常运行。觉得应该是服务权限问题,对/etc/passwd文件折腾一番后,奈何自己不了解服务的权限,没有成功。于是用chmod 777 <你的日志所在目录>把日志目录改成所有人都能访问的,就不存在权限不足的问题了。

    展开全文
  • linux 中让java进程以后台形式执行,并输出日志到指定文件中。 举例: 现在linux /home/pro/application/monitor下有一个jar包叫zop-monitor-web.jar,这是个spring-boot web部署包。我们需要用java -jar方式启动,...
  • 方法一(测试时使用): java -jar xxxx.jar 可按ctrl+c打断程序运行,或直接关闭窗口,程序退出。 方法二(debug时使用): ...缺省情况下该作业的所有输出被重定向nohup.out的文件中 方法四:...
  • 该资源包含启动springboot项目的shell脚本文件、以及日志分割必备的cronolog压缩文件
  • 首先将打包的JAR包上传至服务器 1.运行Jar java -jar xxx.jar 终止jar运行方式: 1、ctr+c 2、关闭窗口就可以停止运行该jar 2. 后台运行Jar ...nohup代表程序后台运行,程序日志会输出当前目录下的nohup.o
  • linux启动java程序命令

    2020-07-04 19:24:28
    https://blog.csdn.net/zl1zl2zl3/article/details/89882457 重点是nohup日志文件仍垃圾站
  • 首先新建文件 start.sh #!/bin/bash #下面是配置jar包的存放的路径 ....#这里是从外部写入jar包的名字 app=$1 #这里配置需要启动的参数 spring.profiles.active=test ...pid=`ps -ef|grep java|grep $app|awk '{print
  • 这个脚本提供Java进程的启动,停止,重启,查看日志文件的功能。 使用时只需修改PRO_DIR、PRO_LOG_FILE、PID_FILE、MAIN_CLASS、SERVICE_NAME、SHELL_HOME参数即可,下面的脚本基本不用动。 使用方式: 将...
  • linux启动java命令

    千次阅读 2020-04-17 09:39:21
    一、启动jar包命令 nohup java -jar -Xms128M -Xmx1024M -server.port=9002 XX.jar > XX.out 2>&1 &...java启动程序 -jar:启动类型 -Xms128M -Xmx1024M:指定内存,Xms一般为最大...
  • linux启动服务同时显示日志到屏幕

    千次阅读 2018-04-03 18:12:07
    nohup java -jar ***.jar & tail -f nohup.out
  • 最近使用java 程序打包jar包后,以服务...1.以服务方式启动java。  ubuntu在16.10以后改为使用systemd进行开机自启动管理,故这里采用systemd。  步骤1. 将文件夹(内含***.sh,***.jar),放在usr/local/下 ...
  • /** * 获取指定log文件的指定关键字的日志信息 * @param connection SSH的连接 * @param logFile 需要读取的log文件 全路径 /opt/dubbo_server/risk-server-provider-xjd/logs/server-info.log * @param key 关键字 ...
  • linux java程序控制台日志输出

    千次阅读 2018-12-07 13:36:57
    linux java程序控制台日志输出 控制台日志输出nohup.out文件中 nohup java -jar xx.jar&amp;amp;gt;nohup.out 2&amp;amp;gt;&amp;amp;amp;1 &amp;amp;amp; 不保存控制台日志 nohup java -...
  • 主要介绍了Linux启动jar包的shell脚本,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • linux根据查看java进程日志的方法

    千次阅读 2020-03-03 23:55:08
    1)先用jps查看进程pid,该进程pid为7233 2)cd /proc/7233/fd,然后用ll查看目录下文件
  • 我们写好的Java程序(非web项目),直接在服务器中敲入命令 java -jar app_name.jar就可以运行,如果想让程序一直在服务器中运行,则需要nohup命令。如下: nohup java -jar app_name.jar 如果需要将程序输出的日志...
  • 实时打印 linux 服务器日志项目,不依赖其他框架,很简单的一个实时打印日志的项目文件,可以加人其他服务器中
  • Linux查看日志启动服务、常用命令

    千次阅读 2020-12-04 23:01:11
    启动服务 ps -ef |grep java 查看包含“java”的所有进程 (ps -ef|grep svn) kill -9 进程号 杀掉自己需要重新启动的进程 cd Oracle/Middleware/user_projects/domains/base_domain/bin 切该目录下 nohup ./...
  • 如何把java程序作为Linux服务启动

    万次阅读 2017-09-20 22:42:06
    java程序作为Linux服务启动前言当作为服务启动之后,对于程序的管理更加简单方面了,通过命令行systemctl start xxx.service //启动项目systemctl stop xxx.service //停止项目systemctl restart xxx.service //重启...
  • nohup java -jar /home/stm/jar/stm-management.jar >> /home/stm/jar/stm-management-$(date +%Y-%m-%d).log 2>&1 &
  • 使用 logrotate 命令可以手动执行日志滚动的操作。本文将要介绍的就是手动进行日志滚动的方法,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
  • 今天在发布测试环境服务的时候,没有使用Java启动命令,而是选择使用最开始配置的启动脚本。 发现没有效果,不光没有重启,还把现存的服务给挂掉了… 再次调用重启脚本,查看日志发现没有任何响应日志! 1.使用java ...
  • java通过代码登录远程linux服务器并执行linux命令源码以及jar包
  • Linux启动jar包,输出日志

    千次阅读 2021-02-02 17:39:36
    Linux环境下运行jar文件 方式一: 命令:java -jar xxxx.jar 特点:当前ssh窗口被锁定,可按ctrl+c打断程序运行,或直接关闭窗口,程序退出。 方式二: 命令:java -jar xxxx.jar & 特点:&表示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,118
精华内容 53,247
关键字:

linux启动java服务到日志

java 订阅
linux 订阅