一个 Java Web 应用从命令行启动和用 systemd 启动结果不一样怎么回事

2020-04-22 19:15:21 +08:00
 toboro

看起来两者会连接到不同的数据库。我不会 Java,Java 应用是同事写的,systemd 服务文件是我写的。现在遇到了很奇怪的问题,在命令行执行命令的结果是符合预期的,但是用 systemd 启动的结果不符合预期。根据我同事的说法,用 systemd 启动时获取的是以前版本的配置文件中指向的数据库中的数据,而现在配置文件已经修改,数据库地址变了,应该获取新的数据才对。从命令行启动的版本获取的就是新的数据。请问大家有没有什么思路

Systemd 服务文件是这样的

[Unit]
Description=ipvms

[Service]
Type=simple
Environment="JAVA_HOME=/usr/java/jdk1.8.0_241"
ExecStart=/usr/java/jdk1.8.0_241/bin/java -jar /path/to/jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

在命令行执行和 ExecStart 一模一样的命令就是正常的

1146 次点击
所在节点    问与答
5 条回复
raptium
2020-04-22 19:19:49 +08:00
可能会读取当前工作目录下的配置文件吧,systemd 启动的时候 cwd 是什么呢?
wellsc
2020-04-22 19:22:17 +08:00
父进程共享的环境,命名空间可能不同。
toboro
2020-04-22 19:42:41 +08:00
@raptium 看起来确实跟启动目录有关,systemd 是在 / 下启动的,当我切换到 / 目录再在命令行中启动 Java 应用是,结果就跟 systemd 启动的结果一样了,这样是这 Java 程序写的有问题的吧
ragnaroks
2020-04-22 19:49:04 +08:00
WorkDirectory=/path/to/
toboro
2020-04-22 19:59:04 +08:00
@ragnaroks 嗯,我这样改了之后就正常了,不知道同事的程序怎么写的,其他地方也没有配置文件了。我猜这个程序只会在当前目录找配置文件,找不到配置文件的时候用了程序内硬编码的值

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665094

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX