
看起来两者会连接到不同的数据库。我不会 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/ |