【问题标题】:Connection with boto to AWS hangs when running with crond使用 crond 运行时,与 boto 的连接挂起
【发布时间】:2015-06-06 09:42:12
【问题描述】:

我有一个非常基本的 python 脚本,它使用boto 来查询我的 EC2 实例的状态。当我从控制台运行它时,它工作正常,我很高兴。问题是当我想添加一些自动化并通过crond 运行脚本时。我注意到脚本挂起并无限期地等待连接。我看到boto 有这个问题,有人建议在boto 配置文件中添加一些超时值。我不明白如何以及在哪里,我手动添加了带有建议超时值 (5) 的 /etc/boto.cfg 文件,但它没有帮助。使用strace,您可以看到该配置文件永远不会被访问。有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 cron boto


    【解决方案1】:

    很有可能您的 cron 环境与登录提示的交互式 shell 不够接近。

    路径和诸如 .boto 或 boto.cfg 文件之类的东西并不总是在 cron 环境中找到或位于同一位置。此外,在某些系统(ubuntu)上,cron 作为 DASH 而不是 BASH 运行,所以情况也会有所不同。

    如果您正在编写脚本,请尝试获取 /etc/boto.cfg 文件或设置 AWS 环境变量以确保它使用正确的设置

    更好的是 - 将它们读入您的 python 脚本,使其可移植且不依赖于 env。变量。

    from ConfigParser import ConfigParser, NoOptionError, NoSectionError
    from boto.s3.connection import S3Connection
    
    try:
       config = ConfigParser()
       config.readpf(open('/etc/boto.cfg', 'rb'))
       aws_seckey = config.get('Credentials', 'aws_secret_access_key')
       aws_keyid = config.get('Credentials', 'aws_access_key_id')
       conn = S3Connection(aws_keyid, aws_seckey)
    
    except (IOError, NoSectionError, NoOptionError):     
       conn = S3Connection()  # try env if /etc/boto.cfg missing
    
    except:
      raise
    

    或类似的东西。关键是读取配置而不是假设环境。

    【讨论】:

    • 所以我猜你的答案已经足够接近了。环境变量 http_proxy 是为每个用户在登录系统时定义的,但是 cron 守护进程没有得到它。
    • 如果您确定环境变量的来源(例如 /etc/profile、/etc/bashrc、/etc/profile.d/http_proxy....),那么您可以获取在 cron.d 脚本中 - 或者 - 您可以在 cron 命令中设置变量 例如,您可以将文件放在 /etc/cron.d 中并设置 http_proxy='proxy' -或- 。 /etc/profile.d/proxy 。 man 5 crontab 会有所帮助(参见示例)
    • 我只是在 python 脚本中使用os.envrion['http_proxy'] 设置它,它工作得很好,我不再需要担心它了。每当脚本运行时,它都会确保设置变量,而不管它运行的上下文是什么
    【解决方案2】:

    整个问题似乎是 HTTP_PROXY 环境变量。该变量是在/etc/bashrc 中设置的,并且所有用户都以这种方式得到它,但是当cron 作业(以root 身份)运行时,/etc/bashrc 没有被读取并且变量没有被设置。通过将变量添加到crond(通过crontab -e)的配置文件中,问题得到解决

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2012-05-23
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多