我正在使用Ansible 2.8.4-1.el7
,以便针对一系列RedHat实例/服务器自动执行某些任务。
我正在通过SSH(使用“无密码”密钥)与一个用户登录,这些用户可以以tomcat
身份运行进程,但不能 > sudo
完全一样。 Tomcat服务器具有一个脚本,该脚本具有一些功能,以便控制start
和stop
的动作……这就是我想用Ansible模仿的东西,但是到目前为止,无论何时我都这样做:{{1} }它确实启动了服务器,但是在Ansible完成执行后,该过程退出。
有没有一种方法可以实际执行该脚本,并在Ansible完成后让Tomcat服务器运行?
如果我通过SSH登录到服务器,执行脚本并退出,则可以正常运行。我还为启动脚本添加了一个睡眠时间,通过Ansible执行该脚本,可以看到Tomcat进程,测试Web应用程序等,但是同样,在Ansible完成后,该进程退出。
我确实开始像这样使用/some/path/tomcat9_dev/bin/tomcat9_dev start
模块:
service
...但是这无能为力,它在启动服务器时总是超时(尽管在停止服务器时不会超时,但实际上也不会停止服务器。 ..我已经在服务器启动并运行的情况下单独运行了几次。 - name: Stop service
systemd:
state: stopped
name: tomcat9_dev
- name: Start service
systemd:
enabled: yes
state: started
name: tomcat9_dev
文件如下所示:
/some/path/tomcat9_dev/bin/tomcat9_dev.service
我不确定通过脚本启动Tomcat是否会干扰Ansible和
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64 Environment=CATALINA_PID=/some/path/tomcat9_dev/temp/tomcat.pid Environment=CATALINA_HOME=/some/path/tomcat9_dev Environment=CATALINA_BASE=/some/path/tomcat9_dev Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/some/path/tomcat9_dev/bin/tomcat9_dev start ExecStop=/some/path/tomcat9_dev/bin/tomcat9_dev stop User=tomcat Group=tomcat UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
模块。
答案 0 :(得分:1)
您是否可以直接运行service
包装程序或systemctl
来手动启动和停止要使用Ansible命令/控制的系统上的服务单元?因为那是第一步。
什么是/some/path/tomcat9_dev/bin/tomcat9_dev.service
?因为这对于systemd而言很重要,并且您在安装该单元文件后是否进行了daemon-reload
?
此外,驻留在/some/path/tomcat9_dev/bin/tomcat9_dev
上的脚本是否会使tomcat在前台或后台运行?同样,因为这对于systemd很重要。