如何在没有root访问权限的情况下在启动时运行bash脚本?

32 浏览
0 Comments

如何在没有root访问权限的情况下在启动时运行bash脚本?

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

#!/bin/bash
source activate tensorflow_p36
python /home/ec2-user/abc/wsgi.py

注意:由于tensorflow_p36是一个内置的conda环境,因此不需要从特定的/env/bin目录调用。它可以从任何目录激活。我认为这是Amazon深度学习AMI的一个特性。

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

我尝试过这里的3个替代方法(rc.local、.conf文件、init.d配置),还尝试使用crontab,如这里建议的。我还尝试使用supervisord将这个bash脚本作为一个程序添加。

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

我正在使用Amazon CentOS(深度学习AMI)。有人能否建议一种在系统重新启动时运行此脚本的方法?

0
0 Comments

问题的出现原因:

在没有root权限的情况下,无法在启动时运行bash脚本。

解决方法:

尝试通过以下方法更改源代码。

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

还要检查路径文件是否具有可执行权限。

Anaconda的activate文档通常建议使用Bash和source而不是sh语法。如果使用Bash,source只是.的一个别名。

0
0 Comments

问题的原因是想要在系统启动时运行bash脚本,但是没有root权限。解决方法是使用个人的Crontab来运行脚本。只需要执行一次下面的命令,系统启动时脚本将以用户自身的身份运行。

( crontab -l; printf ' /path/to/bash/file\n' ) | crontab -

如果没有Crontab,会出现一个来自`crontab -l`的错误消息,但是这是无害的。

crontab: no crontab for ec2-user

我尝试过使用root Crontab和ec2-user Crontab,但是由于某种原因它们都无法正常工作。有没有时间限制?比如我的进程需要大约15分钟才能完成,并且使用了11+GB的内存。不确定这是否有影响。

不,Cron仅仅会启动进程,记录事件,然后继续执行。我在/var/log/cron文件中读到了以下内容:Mar 8 09:59:44 ip-xxx-xxx-xxx-xxx CROND[3617]: (ec2-user) CMD (/home/ec2-user/abc/runinenv.sh ),这意味着脚本已经被执行了。它可能没有成功完成,但是这不是Cron所关心的,也没有意义进行讨论,除非我们看到代码或者至少一些日志输出。(检查你的邮箱)。

0
0 Comments

有时候我们需要在系统启动时运行一个bash脚本,但是没有root权限。下面是一个关于如何在没有root权限的情况下在启动时运行bash脚本的问题以及解决方法。

在rc.local文件中,指示root以你的身份运行它:

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

这个方法非常好用!经过很多尝试后,你的简单解决方案完美地解决了问题!谢谢 🙂

编辑rc.local文件需要root权限,这个方法如何解决了这个问题呢?

0