2

jekyll build --source /path/to/source/dir --destination /path/to/dest/dir我有一个 cron 作业集来执行一个 shell 脚本,告诉服务器在每小时 2 分钟后运行一个 ruby​​ 命令 ( )。当我通过终端运行脚本时,脚本执行得很好,但 cron 似乎没有触发它。我知道 cron 的环境与用户的环境不同,并且根据其他地方的建议,我已将其源路径设置为 my .bash_profile,其中定义了用户 ruby​​ 环境。我现在比较茫然。

crontab 条目如下所示:

2 * * * * . $HOME/.bash_profile ~/jek.sh

FWIW,相关部分.bash_profile,在安装 RVM 时自动设置(在共享主机上,使用有点过时的 ruby​​,在无法写入服务器自己的 ruby​​ 目录的情况下启动并运行 Jekyll 意味着使用 RVM;这似乎有效绝对没问题),是:

PATH=$PATH:$HOME/bin

export PATH

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

我是否错误地调用了我的用户配置文件以在 cron 环境中使用?我是否遗漏了语法中明显的东西?任何帮助将非常感激。

4

3 回答 3

3

你认为$HOME在 cron 的环境中会评估什么?

由于您使用的是rvm. 是运行 cron 作业的正确方法

于 2013-10-04T13:15:33.743 回答
1

您可能需要使用绝对路径,因为 cron 可能非常挑剔。

在“crontab -e”之后试试这个:

2 * * * * /bin/bash /home/username/jek.sh

如果要将命令串在一起,请在每个命令之间使用 &&:

2 * * * * /bin/bash /home/user_name/.bash_profile && /bin/bash /home/username/jek.sh

需要注意的是,除了 /bin/ 之外,您还可以在 /usr/bin 中找到许多命令。要查找命令的绝对位置,请使用“which”。例如, :

user@computer:~$ which bash
 /bin/bash

最后,您可能可以使用 cron 直接运行 ruby​​ 脚本,使用 jekyll 的绝对路径,并且可能在 && 之后,以便首先设置环境。

于 2013-10-04T13:03:13.530 回答
1

在您的问题中,您正在运行的 cron 就像

2 * * * * . $HOME/.bash_profile ~/jek.sh

您需要使用此条目更正/验证多项内容

  1. 检查两者的文件权限是777775( rwx)。如果没有,则使用更改文件权限chmod 777 ~/jek.sh
  2. 检查他们每个人是否在他们的 shebang 行中定义了他们是哪种语言脚本 ( #!/usr/local/env sh)
  3. &&用or分隔两个脚本,;以便它们都能正常运行。目前,第二个脚本的名称将被视为第一个的参数。
  4. .后面有一个2 * * * *部分。我不知道你为什么添加它 - 它必须被删除。


如果@psny 的答案对您不起作用,请尝试在您的 cron 条目中导出您的路径变量。在那之后,整个事情应该正常工作。脚步

1)找到的值$PATH

echo $PATH #Lets call the string :some/path/:another/path

2)在您的 crontab 条目中手动设置路径

2 * * * * export PATH=:some/path/:another/path && /bin/bash /home/username/jek.sh
于 2013-10-04T18:26:57.567 回答