【问题标题】:Trouble Running Ruby Script Using Crontab?使用 Crontab 运行 Ruby 脚本时遇到问题?
【发布时间】:2016-01-05 05:27:45
【问题描述】:

这是我第三次尝试发布此内容。我在使用 crontab 运行 Ruby 脚本时遇到了一些问题。

下面是我的文件树

rubyUbuntuIssue
    ├── logFile.txt
    ├── RubyFile.rb
    ├── Script_Files
    │   ├── logFileTwo.txt
    │   ├── scripttwo.sh
    │   └── trigger_file.rb
    └── trigger.sh

这是我的crontab file

SHELL=/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin

*/1 * * * * sh /home/ubuntumike/Documents/rubyUbuntuIssue/trigger.sh >> /tmp/mybackup.log

这是我的trigger.sh 文件

set -x
set -e
SHELL=/bin/bash
#PATH=/home/ubuntumike/.rvm/gems/ruby-2.1.5/bin:/home/ubuntumike/.rvm/gems/ruby-2.1.5@global/bin:/home/ubuntumike/.rvm/rubies/ruby-2.1.5/bin:/usr/local/sbin:/usr/local/bin:/usr/s$
cd /home/ubuntumike/Documents/rubyUbuntuIssue

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
# or use an absolute path instead of $HOME, just make sure the script get sourced
# after that you can choose correct ruby with rvm
rvm use ruby-2.1.5

ruby RubyFile.rb;

ruby Script_Files/trigger_file.rb 2>&1 >> /tmp/errors.txt;

sh Script_Files/scripttwo.sh

echo "The present working directory is `pwd`"
echo "$(date) running  trigger.sh file"
echo "`ruby -v`"

当我直接从终端运行trigger.sh 时,一切正常,但是当使用crontab 运行时,只有RubyFile.rb 会运行,它与shell 文件处于同一级别

好的,当trigger.sh 被执行 3 个脚本时会发生什么 RubyFile.rb, scripttwo.sh, trigger_file.rb 应该运行。

当我直接从终端运行时,所有 3 个脚本都按预期工作。

当我使用 crontab 运行时,RubyFile.rbscripttwo.sh 将运行,但 trigger_file.rb 不会运行。我根本不知道我做错了什么。 如果您愿意,可以查看 GitHub https://github.com/omearamike/rubyUbuntuIssue 上的确切代码。

如果有人可以提供一些指导,我将不胜感激,因为我完全迷失了并且没有选择。

trigger.sh 运行时终端中的当前响应。

+ set -e
+ SHELL=/bin/bash
+ cd /home/ubuntumike/Documents/rubyUbuntuIssue
+ [[ -s /home/ubuntumike/.rvm/scripts/rvm ]] trigger.sh: 7: trigger.sh: [[: not found
+ rvm use ruby-2.1.5

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for an example.

+ ruby RubyFile.rb
+ ruby Script_Files/trigger_file.rb
+ sh Script_Files/scripttwo.sh
Script_Files/scripttwo.sh: 10: Script_Files/scripttwo.sh: date: not found
running  scripttwo.sh file...........................SUCCESS
+ pwd
+ echo The present working directory is /home/ubuntumike/Documents/rubyUbuntuIssue
The present working directory is /home/ubuntumike/Documents/rubyUbuntuIssue
+ date
+ echo Wed Oct  7 22:10:48 IST 2015 running  trigger.sh file
Wed Oct  7 22:10:48 IST 2015 running  trigger.sh file
+ ruby -v
+ echo ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]

【问题讨论】:

  • 为什么这是您第三次尝试询问?您还有另外两个现有问题,只有一个答案,并且很多 cmets 要求澄清。与其不断提问,或许您应该改写您的第一个问题以改进它,让我们获得更多信息以便为您提供帮助?
  • 好的对不起,我从我的代码中删除了很多不重要的东西,以便更容易调试。下次我会知道的,谢谢
  • 请决定哪个是您当前的问题并删除其他问题,否则您会稀释每个问题的价值。不要浪费那些试图帮助你的人的时间;我保证看到重复提出的问题,但似乎没有取得进展,只会让那些试图提供帮助的人望而却步。
  • 哪个用户拥有 crontab? Root,还是个人用户的 crontab? Root 不会与用户拥有相同的环境,出于安全原因,它通常受到更多限制。如果您希望 root 以用户身份正常运行代码,则必须确保 root 的环境是正确的,方法是设置包装脚本或获取设置环境的文件,然后使用 Ruby 的所有内容的显式路径到脚本。不要依赖操作系统来搜索路径,告诉它一切在哪里。例如,您认为谁的$HOME 会生效?
  • 好的,是的,当我打开我的 crontab 时,我使用 sudo crontab -e

标签: ruby shell ubuntu crontab


【解决方案1】:

您似乎在使用rvm。与其手动设置PATH,不如将​​此工作委托给rvm。在你的trigger.sh:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
# or use an absolute path instead of $HOME, just make sure the script get sourced
# after that you can choose correct ruby with rvm
rvm use ruby-2.1.5

添加到你的非工作脚本的末尾2>&1 >> /tmp/errors.txt,这样你就可以在一个地方看到stdout和stderror,这样你就会知道你遇到了什么确切的错误,像这样:

ruby Script_Files/trigger_file.rb 2>&1 >> /tmp/errors.txt

【讨论】:

  • 感谢您与我们联系。好的,我尝试记录错误消息,但没有记录任何内容。此外,当我将 echo ruby -v" 放在脚本文件的末尾时,它表明它使用了正确的 Ruby 版本。
  • 我最大的问题是,如果 Ruby 文件与我的 Shell 文件位于同一目录级别,它将运行没有任何问题,但如果它是一个比 Shell 文件更深的文件夹,那么它将无法运行运行。
  • set -xset -e 放在你的 shell 脚本的开头。这将启用跟踪模式并在第一个不成功的命令上完成,对调试非常有帮助。
  • trigger.sh: 5: trigger.sh: [[: not found RVM 不是一个函数,使用“rvm use ...”选择红宝石将不起作用。您需要更改终端模拟器首选项以允许登录 shell。有时需要使用/bin/bash --login 作为命令。请访问rvm.io/integration/gnome-terminal 获取示例。
  • RVM 似乎没有正确加载。你能用你当前trigger.sh的内容更新你的问题吗?
猜你喜欢
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2016-12-18
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 2013-12-20
相关资源
最近更新 更多