将 www-data 的路径添加到 PATH 环境变量

将 www-data 的路径添加到 PATH 环境变量

我正在尝试在手动安装 TeX Live 2012 后为我的 Apache 用户 ( )添加/usr/local/texlive/2012/bin/x86_64-linux到环境中。PATHwww-data

我编辑了我的/etc/environment

export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/texlive/2012/bin/x86_64-linux"

将此路径包含到PATH所有用户的系统范围环境变量中。

但是,如果我执行,sudo -u www-data printenv PATH我只会得到:

# sudo -u www-data printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

我不明白这个问题的根源,并感谢任何帮助。

答案1

我遇到了类似的问题,在运行 PHP exec 命令时我需要使用 www-data 的特定导出,并设法拼凑出这个解决方案:

  • 编辑/etc/apache2/envvars

    sudo nano /etc/apache2/envvars
    
    • 将您的导出内容添加到文件末尾并保存。

      export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/texlive/2012/bin/x86_64-linux"
      
    • 重新启动Apache:

      sudo service apache2 restart
      

现在如果你执行以下 PHP

<?php
    $descriptorspec = array(
       0 => array("pipe", "r"),  // stdin
       1 => array("pipe", "w"),  // stdout
       2 => array("pipe", "w"),  // stderr
    );
    $process = proc_open('env', $descriptorspec, $pipes, dirname(__FILE__), null);
    $stdout = stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    var_dump($stdout);
?>

您应该看到文件中设置的环境路径。似乎 apache 仅使用该配置文件的内容而不是 bash.bashrc 等类型文件的内容在 www-data 下生成命令?我不能肯定地说,因为我是 Linux 新手。

不确定这是否正是您想要实现的,但希望它能有所帮助。

答案2

/etc/environment不需要export在键/值对前面添加语句。如维基百科

它不是一个脚本文件,而是由每行一个赋值表达式组成。

另一个问题关于格式如何运作。

相关内容