【问题标题】:Batch user's environment variables not getting set in su -c未在 su -c 中设置批处理用户的环境变量
【发布时间】:2014-09-05 21:34:42
【问题描述】:

我正在尝试将我的 /etc/rc.local 设置为以另一个用户身份在重新启动时自动启动一个进程。出于某种原因,该用户的 .bash_rc 似乎没有被初始化。

这是我添加到 /etc/rc.local 的命令:

sudo su -l batchuser -c "/home/batchuser/app/run_prod.sh &"

这不起作用,所以我也尝试了这个:

sudo su -l batchuser -c ". /home/batchuser/.profile; /home/batchuser/app/run_prod.sh &"

run_prod.sh 只是启动了一个 python 脚本。 python 脚本失败,因为它引用了在 .bash_rc 中初始化的 python 路径中的模块


编辑:当我这样做时它会起作用

sudo su -l batchuser -c "export PYTHONPATH=/my/python/path; /home/batchuser/app/run_prod.sh &"

为什么这行得通,而不是上面的陈述? .bashrc 怎么没有初始化?

【问题讨论】:

  • batchuser 的 sudoers(5) 设置是什么(可通过 sudo -l -U batchuser 获得)?

标签: python bash environment-variables su


【解决方案1】:

我也遇到了同样的问题。我无法完全解释这种行为,但我最终做了这种事情:

sudo $PYTHONPATH=$PYTHONPATH the_command

或更具体地针对您的情况,

sudo $PYTHONPATH=$PYTHONPATH su -l batchuser -c /home/batchuser/app/run_prod.sh &"

这对你有用吗?如果确实如此,您可能会发现它不会像您期望的那样立即返回。您可能需要将 & 移到引号之外,以便它适用于 sudo 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多