2014-09-05 120 views
0

我试图设置我的/etc/rc.local来自动启动另一个用户重启时的进程。出于某种原因,该用户的.bash_rc似乎没有被初始化。批处理用户的环境变量没有在su -c中设置-c

这是我加入到/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脚本。因为它引用,它是其中获取了.bash_rc初始化一个python路径模块的Python脚本失败


编辑:它的工作原理,当我做这个

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

为什么这项工作,而不是上面的声明?为什么.bashrc没有被初始化?

+0

'batchuser'的sudoers(5)设置是什么(可以用'sudo -l -U batchuser'获得)? – Armali 2015-05-11 12:57:18

回答

0

我遇到了同样的问题。我不能完全解释的行为,但我结束了做这种类型的事情:

sudo $PYTHONPATH=$PYTHONPATH the_command 

或更专门为您的情况下,

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

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