【问题标题】:How to run bash script at startup without root access?如何在没有 root 访问权限的情况下在启动时运行 bash 脚本?
【发布时间】:2018-08-15 20:52:27
【问题描述】:

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

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

注意:tensorflow_p36 是一个内置的 conda 环境,不需要从特定的 /env/bin 目录中调用。它可以从任何目录激活。我认为这是Amazon Deep Learning AMIs的一个特点。

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

我在这里尝试过all 3 alternatives(rc.local,.conf 文件,init.d 配置),也尝试过使用 crontab 作为suggested here。我还尝试使用 supervisord 将此 bash 脚本添加为程序。

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

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

【问题讨论】:

  • 您是否尝试启动虚拟环境?
  • 第一行依赖于activate 在您路径上的目录中。
  • @AbhisekRoy,是的,想激活现有的 virtualenv 并在该环境中运行 python 脚本。

标签: python bash centos virtualenv


【解决方案1】:

在 rc.local 中,指示 root 像你一样运行它:

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

【讨论】:

  • 工作就像一个魅力!经过这么多试验,您的简单解决方案完美运行!谢谢:)
  • 要编辑 rc.local 文件,你需要 root 权限 r8 吗?这是怎么解决的
【解决方案2】:

尝试更改来源。

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

同时检查chmod +x你的路径文件。

【讨论】:

  • Anaconda activate 文档通常建议使用 Bash 和 source 而不是 sh 语法。如果您使用 Bash,source 只是 . 的别名
【解决方案3】:

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

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

如果您没有crontabcrontab -l 会发出错误消息,但它是无害的。

crontab: no crontab for ec2-user

您只需执行一次,系统启动后该作业将作为您自己执行。

【讨论】:

  • 我曾尝试过 root Crontab 和 ec2-user 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/runinenv.sh ),仍然没有执行它。
  • 这意味着它做到了, 毫不含糊。它可能没有成功完成,但这不是cron 监控或关心的事情,也不是我们可以在没有看到代码或至少某种记录输出的情况下有意义地讨论的事情。 (检查您的邮件收件箱。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多