crontab的不运行Ruby脚本

问题描述 投票:8回答:5

下面的crontab -l似乎没有运行。请手动运行该脚本运行正常。这是我看到的错误

Dec  3 20:12:01 dahlia /USR/SBIN/CRON[13912]: (gigawatt) CMD (/bin/sh -c "(export   PATH=/usr/bin:/bin; /home/gigawatt/drbronnersbot/drbronnersbot.rb)")
Dec  3 20:12:01 dahlia /USR/SBIN/CRON[13910]: (CRON) error (grandchild #13912 failed with exit status 1)

这里是crontab中:

* * * * * /bin/sh -c "(export PATH=/usr/bin:/bin; /home/gigawatt/drbronnersbot/drbronnersbot.rb)"

权限是完全开放的,它的可执行文件,我把ENV路径在文件的开头,还没有骰子。

ruby crontab
5个回答
10
投票

编辑:我只注意到用户回答自己的岗位,但我会的情况下,离开这件事有人在这里绊倒横跨了类似的问题。我发现这是一些有用的。

我已经运行到这一点,并发现这是Ruby脚本的解决方案。

红宝石需要在特定的环境中执行。 RVM通过获取为您红宝石环境文件红宝石的特定版本,设置所有所需的环境变量处理此。例如,如果你有红宝石1.9.3补丁448,你可以看看是源环境文件:

cat /usr/local/rvm/environments/ruby-1.9.3-p484

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

(注:我RVM的安装正在/usr/local/..但你可以在其他地方使用which ruby找出安装在您的红宝石在那里。)

在这里你可以看到,它的设置PATH和其他一些重要的环境变量。当您键入rvm use ruby-1.9.3-p448,RVM实际来源的背景文件。

克龙处决是非互动环节,这意味着他们没有“活”用户会话前登录项。当你做手工和运行交互式会话,这一切是照顾你,但对于非交互式会话,它不知道什么壳或在哪里可以找到环境路径。也许有人有更多的知识可以提供一个技术解释为什么。

不管怎么说,要解决这个问题,将它添加到你的crontab的顶部:

SHELL=/bin/bash
BASH_ENV=/home/gigawatt/.bashrc

* * * * * /home/gigawatt/.rvm/rubies/ruby-2.0.0-p247/bin/ruby /home/gigawatt/drbronnersbot/drbronnersbot.rb

这是告诉其外壳使用,然后告诉它源.bashrc文件的非交互式的cron用户。什么是在.bashrc文件?好问题,你应该加入这一行 -

source /usr/local/rvm/environments/ruby-1.9.3-p484

(再一次用自己的红宝石路径替换)基本上你是手动输出该RVM会,发布您的环境文件。这让cron来使用特定的宝石环境或宝石的一种方式。

它应该与这两个变化工作。

EDIT2:在Ubuntu和类似的系统,默认.bashrc往往含有类似

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

正如评论暗示,该文件不会在非交互式/ cron的会话中运行。你在该行添加任何东西不会被执行。

在这种情况下,要么把你的source命令上面那条线或只是使用不同的文件都在一起,像~/.cronrc例如。


9
投票

我已经得到了它的工作使用

* * * * * /bin/bash -l -c 'ruby my-ruby-file.rb'


2
投票

解决它,我打电话在我的代码的两个文件,它无法找到这些文件。我编辑的.rb文件,包括完整路径和现在的作品完美。感谢大家!


2
投票

这是很老,但认为我反正评论。 RVM为您创建安装Ruby的每个版本的包装。

运行此命令与你的Ruby版本替换2.5.1

rvm env --path 2.5.1

这给你的路径环境矿

/home/username/.rvm/environments/2.5.1

你只想要RVM路径

/home/username/.rvm/

看看包裹物目录应该有每个版本的包装和宝石你已经安装了。与封装测试脚本

/home/username/.rvm/wrappers/ruby-2.5.1/ruby /home/username/scripts/script.rb

或者如果你有一个特定的宝石

/home/username/.rvm/wrappers/ruby-2.5.1@gemset/ruby /home/username/scripts/script.rb

直接在crontab使用此命令

* * * * * /home/username/.rvm/wrappers/ruby-2.5.1/ruby /home/username/scripts/script.rb

1
投票

你有没有尝试过:

* * * * * /home/gigawatt/.rvm/rubies/ruby-2.0.0-p247/bin/ruby /home/gigawatt/drbronnersbot/drbronnersbot.rb
© www.soinside.com 2019 - 2024. All rights reserved.