【问题标题】:Specify java/system properties in external file via Bash通过 Bash 在外部文件中指定 java/system 属性
【发布时间】:2020-06-21 05:30:06
【问题描述】:

我想知道是否可以将系统/java 属性放入文本文件,以及如何读取它们并将其传递给下面的启动命令。它可以是任何启动脚本。这只是一个例子。

$SOLR_HOME/bin/solr start -Dsolr.default.confdir=$HOME/my-conf-dir -Dsolr.data.home=$HOME/my-data-dir

此启动脚本将从系统 ctl 调用,我不想将 -D 选项硬编码。我希望它们在我可以控制的文件中。

谢谢

【问题讨论】:

    标签: bash solr systemctl


    【解决方案1】:

    根据您的系统和应用程序,这需要特定于应用程序,因为您不希望一个应用程序的属性泄漏到其他应用程序中。

    对于 Solr this is stored in /etc/default/solr.in.sh,如果您使用了默认的 install_solr_service.sh 脚本。

    据我所知,一般不支持在 JVM 中直接使用属性文件,需要由应用程序来支持它。

    【讨论】:

      【解决方案2】:

      假设你有一个属性文件solr.properties

      # this is a comment
      solr.default.confdir=$HOME/my-conf-dir
      
      # this is another comment
      solr.data.home=$HOME/my-data-dir
      
      solr.foo=$FOO
      

      然后是下面的命令

      export FOO=bar
      grep '^[^#][^=]*=' <(envsubst '$HOME $FOO' < solr.properties)
      

      $HOME 变量替换为主目录,并将$FOO 替换为bar in solr.propertiesgrep 用于所有不以注释# 开头并包含= 字符的行。

      第二条命令扩展为

      arr=( $(printf -- '-D%s\n' $(grep '^[^#][^=]*=' <(envsubst '$HOME $FOO' < solr.properties))) )
      

      将在数组arr 中附加-D 保存属性。

      完整的启动脚本是

      #!/bin/bash
      
      export FOO=bar
      arr=( $(printf -- '-D%s\n' $(grep '^[^#][^=]*=' <(envsubst '$HOME $FOO' < solr.properties))) )
      $SOLR_HOME/bin/solr start "${arr[@]}"
      

      【讨论】:

        猜你喜欢
        • 2015-03-15
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 1970-01-01
        • 2015-08-09
        • 2015-01-03
        • 2018-12-18
        • 1970-01-01
        相关资源
        最近更新 更多