V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
toboro
V2EX  ›  问与答

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

  •  
  •   toboro · 2020-04-22 19:15:21 +08:00 · 1094 次点击
    这是一个创建于 1465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看起来两者会连接到不同的数据库。我不会 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 一模一样的命令就是正常的

    5 条回复    2020-04-22 19:59:04 +08:00
    raptium
        1
    raptium  
       2020-04-22 19:19:49 +08:00
    可能会读取当前工作目录下的配置文件吧,systemd 启动的时候 cwd 是什么呢?
    wellsc
        2
    wellsc  
       2020-04-22 19:22:17 +08:00
    父进程共享的环境,命名空间可能不同。
    toboro
        3
    toboro  
    OP
       2020-04-22 19:42:41 +08:00
    @raptium 看起来确实跟启动目录有关,systemd 是在 / 下启动的,当我切换到 / 目录再在命令行中启动 Java 应用是,结果就跟 systemd 启动的结果一样了,这样是这 Java 程序写的有问题的吧
    ragnaroks
        4
    ragnaroks  
       2020-04-22 19:49:04 +08:00
    WorkDirectory=/path/to/
    toboro
        5
    toboro  
    OP
       2020-04-22 19:59:04 +08:00
    @ragnaroks 嗯,我这样改了之后就正常了,不知道同事的程序怎么写的,其他地方也没有配置文件了。我猜这个程序只会在当前目录找配置文件,找不到配置文件的时候用了程序内硬编码的值
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2850 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:45 · PVG 22:45 · LAX 07:45 · JFK 10:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.