【问题标题】:Python/Ruby: cronjob wont load ruby gems?Python/Ruby:crontab 不会加载 ruby​​ gems?
【发布时间】:2015-11-30 19:24:11
【问题描述】:

如何在 cron 中运行 ruby​​ 脚本并让它加载所有“需要”的 gem?我将这个 ruby​​ 脚本作为 python 中的子进程启动:

!#/usr/bin/env python
 ...
def ruby_importdb(import_this):
  if formatinput == 'nessus':
    print '[+] importing the report to the database'
    subprocess.Popen(["/usr/local/rvm/rubies/default/bin/ruby /scripts/nessus-xml2db.rb " + import_this],
                          shell=True, stdout=subprocess.PIPE, universal_newlines=True)

cronjob如下:

51 11 * * * /scripts/nessus-export-scans-nes.py 2>&1 | logger

/var/log/messages 中的事件在 python 脚本尝试执行 ruby​​ 子进程函数时显示以下错误:

root: /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require': cannot load such file -- mysql (LoadError)
root: #011from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require'
root: #011from /scripts/nessus-report-database/nessus-xml2db.rb:3:in `<main>'

如果我从我的用户帐户或 root 运行此脚本,则代码有效。

【问题讨论】:

    标签: python ruby rubygems subprocess cron-task


    【解决方案1】:

    在 crontab 中添加以下行解决了这个问题:

    SHELL=/bin/bash
    BASH_ENV=/root/.bashrc 
    

    并在 .bashrc 中添加以下行:

    source /usr/local/rvm/environments/default

    其中包含以下环境变量:

    export PATH="/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:$PATH"
    export GEM_HOME='/usr/local/rvm/gems/ruby-2.2.1'
    export GEM_PATH='/usr/local/rvm/gems/ruby-2.2.1:/usr/local/rvm/gems/ruby-2.2.1@global'
    export MY_RUBY_HOME='/usr/local/rvm/rubies/ruby-2.2.1'
    export IRBRC='/usr/local/rvm/rubies/ruby-2.2.1/.irbrc'
    unset MAGLEV_HOME
    unset RBXOPT
    export RUBY_VERSION='ruby-2.2.1'
    

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多