首页 > 系统相关 >通过ansible shell模块运行java程序问题记录

通过ansible shell模块运行java程序问题记录

时间:2022-11-02 14:55:07浏览次数:67  
标签:shell java jar start ansible nohup

问题1 启动java进程没有反应

描述

我是通过shell模块执行一个启动脚本,脚本中通过java命令启动spring boot的jar包,脚本的核心但是运行结束后没有反应。看起来进程并没有被执行。

脚本核心黑绒如下:

#!/bin/bash
nohup java jar xxxx.jar &

分析

没有看到任何打印,包括错误信息,不清楚是否是nohup运行导致的,于是增加错误信息重定向。

nohup java jar xxxx.jar 2>&1 nohup.log &

运行后在nohup.log中看到了错误信息,是找不到java路径,但是我在shell中是可以执行java的。

通过搜索发现,ansible使用的是nologin shell,和普通ssh登录的login shell不同,nologin shell登录是不读取/etc/profile,而我的java路径是写在/etc/profile中的。

解决方案

nologin shell会读取/etc/bashrc,把java路径配置在该文件中即可。

问题2 java进程启动后即被杀死

描述

我的ansible playbook文件核心信息如下,其中start.sh的内容即上一步中的shell脚本内容:

---
- hosts: shost1
  remote_user: root
  tasks: 
  - name: run jar
    shell: ./start.sh
    args:
      chdir: /data/jar/

分析

这个问题看了很久,按道理start.sh中通过nohup启动java进程,即使ansible进程推出,java进程也不会退出。

没有思路,于是在网上搜索,终于找到这个ansible的bug:链接,有其他人发现了ansible的这个bug,nohup启动的进程一样会被杀死。

这个问题没有被解决,被维护方强行关闭了,但是有规避方案,就是在脚本前也加上nohup

解决方案

---
- hosts: shost1
  remote_user: root
  tasks: 
  - name: run jar
    shell: nohup ./start.sh
    args:
      chdir: /data/jar/

标签:shell,java,jar,start,ansible,nohup
From: https://www.cnblogs.com/mosakashaka/p/16851007.html

相关文章

  • Java多线程-ThreadLocal(六)
    为了提高CPU的利用率,工程师们创造了多线程。但是线程们说:要有光!(为了减少线程创建(T1启动)和销毁(T3切换)的时间),于是工程师们又接着创造了线程池ThreadPool。就这样就可以了吗?—......
  • java非公平锁如何理解
    1、非公平锁不能保证锁的获取是按照请求锁的顺序进行的。这可能会导致某个或某些线程永远得不到锁。2、CPU唤醒线程的费用可以降低,整体吞吐效率会很高。但是可能......
  • 【笔记14】Javascript - 继承
    【笔记14】Javascript-继承继承的概念不陌生,在原型、原型链那里,就知道一个对象能继承到原型很多属性和方法。各种继承的方法有优势有不足,看下继承发展史:继承传统形式:原型......
  • 夯实Java基础,一篇文章全解析线程问题
    1.线程是什么操作系统支持多个应用程序并发执行,每个应用程序至少对应一个进程,彼此之间的操作和数据不受干扰,彼此通信一般采用管道通信、消息队列、共享内存等方式。当一......
  • java的多线程实现方式以及对应的线程锁实现
    一、多线程的实现1.1继承Thread类继承:packagecom.yuan.yk.ThreadLearn;importstaticcom.yuan.yk.ThreadLearn.func1.doSomething;publicclassThreadFuncextends......
  • java Annotation 注解多参数
    javaAnnotation注解多参数使用注解格式注解的格式,通常情况下使用@符号开始,后面跟上对应的注解名称,以及注解参数和对应的值。@注解名称([{标识符=元素的值,标......
  • Java数组的三种初始化方式
    Java数组的三种初始化方式//第一种int[]is=newint[3];is[0]=1;is[1]=2;is[2]=3;//第二种int[]is2={1,2,3};//第三种int[]is3=newint[]{1,2,3};//我个人......
  • Ansible - 加密解密
    ansible-vault用途encryption/decryptionutilityforAnsibledatafiles主要应用于包含敏感信息的场景,可以加密和解密敏感信息See'ansible-vault--help'formo......
  • java数组从小到大排序_排序算法--冒泡排序(Java语言) 冒泡排序是一种简单的排序算法。它
    java数组从小到大排序_排序算法--冒泡排序(Java语言)冒泡排序是一种简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字......
  • java最简单的知识之创建一个简单的windows窗口,利用Frame类
    作者:程序员小冰,微博:​​http://weibo.com/mcxiaobing​​首先给大家看一下效果。当然,就像我们刚学习写代码,写helloworld!很简单,所以,慢慢从简单开始学习吧。这次介绍Fram......