Python 如何在启动时运行bash脚本而无需root访问权限?

Python 如何在启动时运行bash脚本而无需root访问权限?,python,bash,centos,virtualenv,Python,Bash,Centos,Virtualenv,我有一个bash文件,从终端执行时可以正常工作 #!/bin/bash source activate tensorflow_p36 python /home/ec2-user/abc/wsgi.py 注意:tensorflow_p36是内置的conda环境,不需要从特定的/env/bin目录调用。它可以从任何目录激活。我认为这是我的一个特点 如果我使用sudo运行这个bash脚本,它不会激活虚拟环境,并且在默认的python环境中工作。python文件只能在该虚拟环境中运行 我在这里尝试过(

我有一个bash文件,从终端执行时可以正常工作

#!/bin/bash
source activate tensorflow_p36
python /home/ec2-user/abc/wsgi.py
注意:
tensorflow_p36
是内置的conda环境,不需要从特定的
/env/bin
目录调用。它可以从任何目录激活。我认为这是我的一个特点

如果我使用
sudo
运行这个bash脚本,它不会激活虚拟环境,并且在默认的python环境中工作。python文件只能在该虚拟环境中运行

我在这里尝试过(rc.local.conf文件,init.d config),也尝试过使用crontab作为。我还尝试使用supervisord将这个bash脚本添加为一个程序

当程序从这些方法运行时,我总是得到相同的导入错误,因为它使用的是默认的Python3环境,它没有所需的依赖项


我正在Amazon CentOS(深度学习AMI)上工作。有人能建议每次系统重新启动时运行此脚本的方法吗?

尝试通过更改源代码

. activate tensorflow_p36
python /home/ec2-user/abc/wsgi.py

同时检查路径文件。

在rc.local中,指示root用户以如下方式运行它:

su --command /path/to/bash/file --login grimlock

您可以从您的个人Crontab运行它

( crontab -l; printf '@reboot /path/to/bash/file\n' ) | crontab -
如果您没有
crontab
,则会出现来自
crontab-l
的错误消息,但这是无害的

crontab: no crontab for ec2-user

您只需执行一次,系统启动后,作业将按您自己的方式执行。

您是否尝试启动虚拟环境?第一行依赖于
激活
位于您路径上的目录中。@AbhisekRoy,是,想要激活现有的virtualenv并在该环境中运行python脚本。Anaconda
activate
文档通常建议使用Bash和
source
,而不是
sh
语法。如果您使用的是Bash,
source
只是
的别名,工作起来很有魅力!经过这么多的尝试,你的简单解决方案完美地工作了!谢谢:)要编辑rc.local文件,您需要根访问权限r8吗?这是如何解决的?itI已经尝试了根Crontab和ec2用户Crontab,但由于某些原因,它根本不起作用。有时间限制吗?我的过程大约需要15分钟才能完成,并且使用了11+GB的RAM。不确定它是否重要。不,
cron
只是启动流程,记录事件,然后继续。我在/var/log/cron文件中读到:Mar 8 09:59:44 ip xxx xxx xxx xxx CROND[3617]:(ec2 user)CMD(/home/ec2 user/abc/runinev.sh),但它仍然没有执行它。这意味着它确实执行了。它可能没有成功完成,但这不是cron监视或关心的事情,也不是我们在没有看到代码或至少某种记录输出的情况下可以有意义地讨论的事情。(检查您的邮件收件箱。)