在 Ubuntu 12.04 上,我定义了一个环境变量,/etc/environment如下所示:
FOO="value_before#value_after"
Run Code Online (Sandbox Code Playgroud)
当我通过 ssh 进入服务器检查值时,我得到了这个:
$ env | grep FOO
FOO=value_before
Run Code Online (Sandbox Code Playgroud)
我猜它正在将#视为评论并将其剥离,但是,这有效:
$ . /etc/environment
$ export FOO
$ env | grep FOO
FOO=value_before#value_after
Run Code Online (Sandbox Code Playgroud)
我试过这样逃避#:
FOO="value_before\#value_after"
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我只是得到了这个:
FOO=value_before\
Run Code Online (Sandbox Code Playgroud)
关于如何使散列被视为值的一部分的任何想法?任何帮助都会很棒。
我在/etc/environment文件中尝试过的值:
FOO='value_before#value_after'
FOO="value_before#value_after"
FOO='"value_before#value_after"'
FOO="value_before\#value_after"
FOO='value_before\#value_after'
Run Code Online (Sandbox Code Playgroud)
以及上述的其他各种组合。当您通常在 shell 中设置它们时,其中的很多都将起作用。但它们似乎在/etc/environment文件中不起作用。
我正在启动一个项目,该项目使用环境变量来设置数据库连接和其他一些事情。(他们不想使用配置文件,因为人们粗心大意并覆盖了它们)。
无论如何,我正在使用 nginx,虽然它支持 env - 它似乎并没有很好地支持它。您不能在每个服务器块的基础上设置 env 值。换句话说,这行不通:
server {
listen 80;
server_name domain;
env FOO = "bar";
}
Run Code Online (Sandbox Code Playgroud)
你必须这样做:
env FOO = "bar";
http {
server {
listen 80;
server_name domain;
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着我不能拥有特定于 vhost 的值。所以我必须为每个站点创建一个完整的 vhost 配置,并且只激活我目前想要的一个,以便正确设置值。
有没有办法解决这个问题?
是否可以通过引导提示向 Debian 安装程序添加变量,以便可以在预置文件中使用该变量?
特别是,我正在尝试解决以下问题:
我们有一个非常广泛的安装后脚本,通常是从服务器下载的。但是现在我想创建 Packer 映像并将安装后脚本与其他 Packer 文件一起保留在版本控制中。为了访问 preseed,我可以在引导命令中执行“preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg”。但现在我希望安装程序从同一位置下载安装后脚本。
目前,安装后挂钩如下所示:
d-i preseed/late_command string wget -q -O /tmp/postinstall.sh http://our.public.server/postinstall.jessie.sh ; sh /tmp/postinstall.sh
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做类似的事情:
d-i preseed/late_command string wget -q -O /tmp/postinstall.sh http://{{ .HTTPIP }}:{{ .HTTPPort }}/postinstall.jessie.sh ; sh /tmp/postinstall.sh
Run Code Online (Sandbox Code Playgroud)
但是当然 Debian 安装程序不会用所需的值替换那些。所以我在想有可能将类似环境变量的变量传递给我们可以在 preseed 文件中使用的安装程序。
任何提示或提示表示赞赏!
编辑:尝试将 late_command 添加到引导命令中,但没有被接受。
编辑:尝试预置/运行,但它在不允许目标内命令的不同环境中运行。
编辑:这可以是一种解决方法:如何在 debian preseed 文件中通过管道将命令组合在一起?但我更喜欢将脚本放在一个单独的文件中。如果不可能,那也是不可能的。
我想为我的每台远程机器将 TERM 环境变量设置为不同的值,所以我SetEnv TERM=myTermForRemoteVar在~/.ssh/config. 远程机器仍然可以看到TERM=myLocalTermVar。
我AcceptEnv TERM在/etc/ssh/sshd_config远程机器上添加了。仍然没有运气。
我只是为了测试目的而尝试在SetEnv FOO=smth本地和AcceptEnv FOO. 这工作得很好,远程机器可以看到FOO=smth.
是TERM通过SSH特殊处理?SetEnv一般适用,但不适用于TERM. 还有其他人看到这种行为吗?至少没有记录。这是一个错误吗?
我正在尝试启动需要 env 的服务。变量设置为特定路径。我在“/etc/profile.d/”中设置了这个变量。但是,当我使用service命令启动此服务时,它不起作用。
男士服务:
service runs a System V init script in as predictable environment as possible,
removing most environment variables and with current working directory set to /.
Run Code Online (Sandbox Code Playgroud)
所以似乎service正在删除我的变量。我应该如何设置变量以防止它们被删除。或者是我不应该做的事情。
我可以使用 init-scripts 手动启动服务,甚至可以将路径硬编码到脚本中,但我想知道如何通过service命令使用它。
从命令提示符,我得到以下信息:
>echo %ProgramFiles%
C:\Program Files
Run Code Online (Sandbox Code Playgroud)
然而,一些应用程序(在这个例子中是 PHP,虽然我在 Apache 的 httpd.conf 中看到了相同的行为),它是:
>php -r "echo $_ENV['ProgramFiles'];"
C:\Program Files (x86)
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
背景:我正在开发与主机操作系统是 32 位还是 64 位无关的脚本,对于配置文件,这非常有效。在 32 位系统上,%ProgramFiles%是“C:\Program Files”,而在 64 位系统上,%ProgramFiles%似乎同样返回C:\Program Files (x86). 我只是好奇为什么当我从 Windows 命令提示符(或在资源管理器栏等中)尝试它时,同样的情况不成立。是否有 64 位命令提示符之类的?
在供应商构建的系统上工作时,我们意识到C:他们创建的操作系统分区 ( ) 相当小 (38 GB)。目标是将 Windows 2008 R2 更新到 SP1。一些消息来源指出,在安装过程中需要 8 GB,其中包括提取的临时文件。我设法在分区上清除了多达 4.6 GB 的空间,但仍然没有削减它。
在同一系统上有足够空间的卷上存在另一个分区,但经验告诉我,这些安装程序喜欢提取到C:\temp(或其他一些变体)。我的问题是:
%TEMP%)?一方面,我尝试了其他选项,例如缩小更大的应用程序分区 ( D:),但是在该分区之后只有很多空间,这使得操作系统分区无法利用卷上释放的空间。此外,我目前不在车站尝试此操作,但很高兴知道这是否值得事先尝试。谢谢!
environment-variables windows-update windows-server-2008-r2 service-pack
我正在尝试在 CentOS 7 上使用 Systemd 设置 Tomcat 服务。
我已经安装了 Oracle Java 1.8u74/usr/java/jdk1.8.0_74并$JAVA_HOME在启动时设置了环境变量,如下所示:
# echo "export JAVA_HOME=/usr/java/jdk1.8.0_74" > /etc/profile.d/setenv.sh
Run Code Online (Sandbox Code Playgroud)
当我登录系统时,我可以运行echo $JAVA_HOME并查看正确的路径。我已经安装了 Tomcat 并且该tomcat.service文件具有以下内容:
# Systemd unit file for Tomcat
[Unit]
Description=Apache Tomcat
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/java/jdk1.8.0_74
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=www
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
问题是,如果我省略读取的行Environment=JAVA_HOME=/usr/java/jdk1.8.0_74,Tomcat 找不到 $JAVA_HOME,但我希望它找到 $JAVA_HOME,因为它设置在/etc/profile.d/setenv.sh.
setenv.sh错地方了?我正在为守护进程创建一个服务文件,我想使用变量(在初始化脚本中我使用环境变量)来为执行的脚本定义一些参数。例如,我想使用 2 个参数 $PARAM1 $PARAM2:
[Unit]
Description=my daemon
After=network.target
[Service]
ExecStart=/usr/local/bin/daemon1
PIDFile=/var/run/daemon1.pid
EnvironmentVariable=PARAM1=123
EnvironmentVariable=PARAM2=444
ExecStartPre=-/usr/bin/wget -O - --post-data=key1=$PARAM1&key2=$PARAM2 http://192.168.1.2/log.php
ExecStopPost=-/usr/bin/wget -O - --post-data=key1=$PARAM1 http://192.168.1.2/log.php
Type=simple
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
不用说,这个例子不起作用。systemd 是否可以实现类似的功能?可以对 exec 命令进行什么样的参数化?
我尝试使用 Apache 服务器 2.4.6 和 headers_module 设置带有环境变量**的自定义 HTTP 标头。
我在端口 80 上的 HTTP VHost 中工作。
一切都按预期进行,基本示例如下:
Header set MyHeader "%D %t"
我已阅读 mod_headers 的 Apache 文档:https://httpd.apache.org/docs/2.4/en/mod/mod_headers.html#header
据说可以使用以下方式访问环境变量
%{ENVVARNAME}e
(ENVVARNAME 是 ENV 变量的名称)
我还阅读了其他帖子,但没有真正有效的答案: Apache set custom header with an environment variable
但我的问题是添加一个标头而不是像 HOSTNAME 环境值那样标识我的 Apache 服务器
Header Set X-Serv %{HOSTNAME}e
不成功:始终显示 X-Serv:{null} 而不是值
SetEnv myvar ${HOSTNAME}
Header set X-Serv %{myvar}e
没有成功:它显示在我的 HTTP 标头中:X-Serv: %{myvar}e
我还尝试了其他一些不同的组合:
请注意:我的 HOSTNAME 环境变量存在,并且它显示在“env”命令中,其中 apache 用户拥有 httpd 进程
任何想法?
linux ×2
service ×2
systemd ×2
apache-2.4 ×1
centos ×1
centos7 ×1
debian ×1
http-headers ×1
java ×1
nginx ×1
packer ×1
preseed ×1
redhat ×1
service-pack ×1
ssh ×1
ubuntu ×1
virtualhost ×1
web-server ×1
windows ×1