如何在没有root访问权限的情况下在启动时运行bash脚本?
如何在没有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)。有人能否建议一种在系统重新启动时运行此脚本的方法?
问题的原因是想要在系统启动时运行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所关心的,也没有意义进行讨论,除非我们看到代码或者至少一些日志输出。(检查你的邮箱)。