看起来两者会连接到不同的数据库。我不会 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
一模一样的命令就是正常的
1
raptium 2020-04-22 19:19:49 +08:00
可能会读取当前工作目录下的配置文件吧,systemd 启动的时候 cwd 是什么呢?
|
2
wellsc 2020-04-22 19:22:17 +08:00
父进程共享的环境,命名空间可能不同。
|
3
toboro OP @raptium 看起来确实跟启动目录有关,systemd 是在 / 下启动的,当我切换到 / 目录再在命令行中启动 Java 应用是,结果就跟 systemd 启动的结果一样了,这样是这 Java 程序写的有问题的吧
|
4
ragnaroks 2020-04-22 19:49:04 +08:00
WorkDirectory=/path/to/
|