ulv*_*ver 9 ruby unix bash scripting crontab
这一直在我身上发生:1)我写了一个脚本(ruby,shell等).2)运行它,它的工作原理.3)把它放在crontab中让它在几分钟内运行,所以我知道它从那里运行.4)它没有,没有错误跟踪,回到步骤2或3 1000次.
当我在crontab中的ruby脚本失败时,我真的不知道为什么它失败导致我输出这样的输出:
ruby script.rb >& /path/to/output
Run Code Online (Sandbox Code Playgroud)
我得到了脚本的输出,但我没有得到它的任何错误,我没有得到来自bash的错误(如果找不到ruby或文件不存在)
我不知道设置了哪些环境变量以及它是否是一个问题.事实证明,要从crontab运行ruby脚本,您必须导出大量的环境变量.
我有没有办法让crontab运行一个脚本,就像我自己从终端运行它一样?
调试时,我必须重置计时器并返回等待.非常耗时.
如何更好地测试crontab中的东西或避免这些问题?
"我有没有办法让crontab运行一个脚本,就像我自己从终端运行它一样?"
是:
bash -li -c /path/to/script
Run Code Online (Sandbox Code Playgroud)
从手册页:
[vindaloo:pgl]:~/p/test $ man bash | grep -A2 -m1 -- -i
-i If the -i option is present, the shell is interactive.
-l Make bash act as if it had been invoked as a login shell (see
INVOCATION below).
Run Code Online (Sandbox Code Playgroud)
天儿真好,
cron的一个基本问题是你得到了一个由cron设置的最小环境.事实上,你只获得四个环境.var的集合,它们是:
而已.
但是,您可以执行的操作是获取所需环境的快照并将其保存到文件中.
现在让你的cronjob源代码一个简单的shell脚本来源这个环境.文件,然后执行您的Ruby脚本.
BTW有一个包装源,一个共同的环境.file是为多个cronjobs强制实施一致环境的绝佳方式.这也强制执行DRY原则,因为它只需要一个点来根据需要更新内容,而不必搜索一堆脚本并搜索特定字符串,例如,如果更改了日志记录位置或现在使用了不同的实用程序正在使用,例如gnutar而不是香草焦油.
实际上,这种技术非常成功地用于构建猴子,它用于实现几个主要世界航空公司共同的主要软件项目的持续集成.3,500kSLOC每天检查和建造几次,每天运行一次超过8,000次回归测试.
HTH
"Avahappy,
您可以编写一个包装脚本,名为 example rbcron
,如下所示:
#!/bin/bash
RUBY=ruby
export VAR1=foo
export VAR2=bar
export VAR3=baz
$RUBY "$*" 2>&1
Run Code Online (Sandbox Code Playgroud)
这会将标准错误从 ruby 重定向到标准输出。然后运行rbcron
cron 作业,标准输出包含 ruby 的 out+err,但也包含 rbcron 本身存在的“bash”错误。在您的 cron 条目中,重定向2>&1 > /path/to/output
以获取输出+错误消息以转到 /path/to/output。
归档时间: |
|
查看次数: |
3701 次 |
最近记录: |