gpt4 book ai didi

cron - 需要在每个 cron 作业之前设置 rvm 环境

转载 作者:行者123 更新时间:2023-12-04 04:43:56 25 4
gpt4 key购买 nike

我大致按照这组说明的第一部分中概述的模式安装和配置了 RVM:http://blog.ninjahideout.com/posts/a-guide-to-a-nginx-passenger-and-rvm-server

基本上,这意味着没有预构建系统 ruby​​(所有 ruby​​ 安装都是由 RVM 管理的)并且 RVM 安装在系统范围内,而不是附加到特定用户(文件位于 /usr/local/rvm),因此 rvm 中的所有用户组可以使用相同的安装 gem 访问相同的 ruby 。

以这种方式设置系统的一个问题是,必须在 shell session 中设置 rvm 环境,然后才能使用 ruby​​。对于所有 rvm 用户,我将其放在他们的 .bashrc 中:source "/usr/local/rvm/scripts/rvm" .这适用于 ssh session 。

问题出现在不执行 .bashrc 的 cron 作业中。上面的 rvm 脚本 (/usr/local/rvm/scripts/rvm) 比设置一些环境变量要复杂得多,所以我实际上想在文件中的每个作业之前运行这个命令。

当然,我可以手动执行此操作,如下所示:

1 2 * * * source "/usr/local/rvm/scripts/rvm"; /do/some/cron/job/1
3 4 * * * source "/usr/local/rvm/scripts/rvm"; /do/some/cron/job/2
5 6 * * * source "/usr/local/rvm/scripts/rvm"; /do/some/cron/job/3
7 8 * * * source "/usr/local/rvm/scripts/rvm"; /do/some/cron/job/4

但我更愿意做这样的事情:
[execute] source "/usr/local/rvm/scripts/rvm"

1 2 * * * /do/some/cron/job/1
3 4 * * * /do/some/cron/job/2
5 6 * * * /do/some/cron/job/3
7 8 * * * /do/some/cron/job/4

显然,上述语法不起作用。但是,有没有办法让它发挥作用? cron 手册页和文档在这里没有太大帮助。但是是否有一些技巧或标准方法可以实现这一目标?

如果重要的话,我正在运行 Ubuntu 10.10 (Maverick Meerkat)。

最佳答案

您不需要编写包装器(按照该逻辑,您不妨为包装器编写包装器)。请保持简单。您需要做的就是配置您的 cron 作业以启动 bash shell,并使该 bash shell 加载您的环境。

脚本中的 shebang 行不应直接引用 ruby​​ 可执行文件,而应引用 rvm 的 ruby​​:

#!/usr/bin/env ruby

这会指示脚本加载环境并运行 ruby​​,就像我们在命令行上加载 rvm 一样。

在许多 UNIX 派生系统上,crontab 可以在定义要运行的作业的实际行之前有一个配置部分。如果是这种情况,您将指定:
SHELL=/path/to/bash  

这将确保从 bash 生成 cron 作业。仍然缺少您的环境,因此要指示 bash 加载您的环境,您需要将以下内容添加到配置部分:
BASH_ENV=/path/to/environment (typically .bash_profile or .bashrc) 

HOME 自动派生自 crontab 所有者的/etc/passwd 行,但您可以覆盖它。
HOME=/path/to/home

在此之后,cron 作业可能如下所示:
15 14 1 * *     $HOME/rvm_script.rb

如果您的 crontab 不支持配置部分怎么办?好吧,您必须将所有环境指令与作业本身一起放在一行中。例如,
15 14 1 * * export BASH_ENV=/path/to/environment && /full/path/to/bash -c '/full/path/to/rvm_script.rb'

Full blog post on the subject

关于cron - 需要在每个 cron 作业之前设置 rvm 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com