toboro
V2EX  ›  问与答

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

  •  
  •   toboro · Apr 22, 2020 · 2069 views
    This topic created in 2247 days ago, the information mentioned may be changed or developed.

    看起来两者会连接到不同的数据库。我不会 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 replies    2020-04-22 19:59:04 +08:00
    raptium
        1
    raptium  
       Apr 22, 2020
    可能会读取当前工作目录下的配置文件吧,systemd 启动的时候 cwd 是什么呢?
    wellsc
        2
    wellsc  
       Apr 22, 2020
    父进程共享的环境,命名空间可能不同。
    toboro
        3
    toboro  
    OP
       Apr 22, 2020
    @raptium 看起来确实跟启动目录有关,systemd 是在 / 下启动的,当我切换到 / 目录再在命令行中启动 Java 应用是,结果就跟 systemd 启动的结果一样了,这样是这 Java 程序写的有问题的吧
    ragnaroks
        4
    ragnaroks  
       Apr 22, 2020
    WorkDirectory=/path/to/
    toboro
        5
    toboro  
    OP
       Apr 22, 2020
    @ragnaroks 嗯,我这样改了之后就正常了,不知道同事的程序怎么写的,其他地方也没有配置文件了。我猜这个程序只会在当前目录找配置文件,找不到配置文件的时候用了程序内硬编码的值
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5084 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 08:45 · PVG 16:45 · LAX 01:45 · JFK 04:45
    ♥ Do have faith in what you're doing.