我编写了一个小的python脚本,作为Apache Tomcat服务的LSB兼容初始化脚本。我在运行openSUSE的工作笔记本电脑上完成了这个脚本和初始测试;实际部署将在Ubuntu Server上进行(请不要开玩笑,我也感到难过)。
虽然脚本在openSUSE(python 2.7.3)下完美运行,但在Ubuntu中它的行为是不同的(也是python 2.7.3)......
当我执行subprocess.Popen调用时,在openSUSE中打开进程然后我将.pid捕获到'control'文件...
在Ubuntu中,同样的脚本,subprocess.Popen调用打开两个进程,一个以'/ usr / bin -c java(...)'开头,然后是另一个'java(...)'。如果写入的PID是来自/ bin / sh ...
的PID,那真的很烦人这是我第一次使用Ubuntu Server,虽然我已经计划将所有内容迁移到RHEL(这种非感觉也不会发生),但我仍然有兴趣知道为什么会在Ubuntu和躲避它的潜在方法......
启动功能就是这个
def start():
set_user()
with open(CATALINA_OUT, "a") as log:
tomcat = subprocess.Popen(TOMCAT_CMD + 'start', shell=True, stdout=log, stderr=log)
write_pidfile(tomcat.pid)
def set_user():
os.setgid(int(TOMCAT_GID))
os.setuid(int(TOMCAT_UID))
答案 0 :(得分:1)
假设TOMCAT_CMD
基本上是java -whatever
,在大多数平台上/usr/bin/java
似乎只是(某些变体)Java,而是在Ubuntu上实现Debian Java策略的一些细节的shell脚本,在exec
之前:使用正确的参数输入系统的首选Java二进制文件。对于它的价值,后者通常是一件好事,因为它可以更容易地从一个Java实现切换到另一个Java实现,但如果你只关心一个特定的实现,那么你可以直接链接到该实现& #39;在TOMCAT_CMD
中的二进制文件(和/或如果你想要完全符合Debian并且不能使用shell脚本,则重新实现Python中的策略。)