【发布时间】: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.rb 和 scripttwo.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