我在Ansible playbook中有一个在后台执行.jar文件的任务,但在完成该任务后,(java)app终止。
- name: Run Java app in the background
shell: nohup java -jar app.jar &
我需要应用程序在剧本中进一步运行任务。有任何想法吗?? 注意:当我在Putty ssh会话中运行它时,它运行顺畅,应用程序保持在后台。
答案 0 :(得分:2)
好的所以我今天遇到了这个问题而且我的脚本有点不同但基本上做同样的事情所以这就是我在Oracle,Centos和RHEL上运行的。
脚本start_service.sh中的我有这个,这个脚本执行时没有来源。
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)"
nohup java -jar ${DIR}/$1 --spring.config.location=${DIR}/application.yml --logging.config=${DIR}/logging.xml > ${DIR}/log/output.log 2>&1 &
在我的剧本中,我有:
- name: run service
shell: "{{ service_install_location }}/application_name/start-service.sh application_name-{{ application_version }}.jar"
args:
chdir: "{{ service_install_location }}/application_name"
executable: /bin/bash
现在,BASH_SOURCE参数特定于bash,所以如果你运行普通的旧sh,那么你需要$ 0。 nohup是必需的,所以当ssh连接终止你的后台任务时不会被杀死(打开-vvv为ansible看看连接是为了解这是如何在远程机器上发生的。)
我应该指出我们暂时这样做,因为这应该作为服务安装在service / init.d的控制之下但是现在,这回答了你的问题
答案 1 :(得分:0)
最可能的原因是IO。尝试:
- name: Run Java app in the background
shell: nohup java -jar app.jar </dev/null >/dev/null 2>&1 &