【问题标题】:Pull from gitolite in cron job在 cron 作业中从 gitolite 中拉取
【发布时间】:2012-07-09 06:08:21
【问题描述】:

我想设置一个 cron 作业,使生产站点从 gitolite 存储库中拉取。

以下命令在非 cron 上下文中工作:

# m     h       dom     mon     dow     command
*       *       *       *       *       cd /home/www/test/autopulling-site/ && /usr/bin/git fetch && /usr/bin/git pull

我怀疑由于 SSH 密钥未在 cron 上下文中正确发送,git 操作无法正常工作。日志什么也没显示。

有什么想法吗?

【问题讨论】:

  • 你设置好什么时候运行了吗?

标签: git ssh cron gitolite


【解决方案1】:

您需要确保用户实际执行cron
在这种情况下它很可能是 root,这意味着您需要确保 $HOME(从 cron 运行时)确实包含您的 .ssh/id_rsa(.pub) 文件。

但是,如果您的私钥受密码保护,请不要忘记 cron 会话不会知道您的 ssh-agent:具体示例请参见“Execute rsync command over ssh with an ssh agent via crontab”。
正如OP Harold Smith 所指出的,keychain 是这里缺少的元素。

【讨论】:

  • 我可以在不使用密码的情况下进行克隆和拉取,这意味着 cron 应该也可以……对吗?我可以在 cron 作业中修改我的 $HOME 参数并添加 .ssh 文件夹吗?我只是将 cron 作业中的 HOME 回显到一个文件中,它显示了我的 ~ 文件夹(但不是 .ssh 文件夹)。
  • 太棒了。你的网址让我走上了正轨!我安装了钥匙串,并且有效。它现在可以使用 gitolite。谢谢! :-)
【解决方案2】:

不知道怎么回事

但是,您可以将命令的输出重定向到一个文件(例如(cd && git pull && ...) &> path/to/file)以查看它打印的内容。

【讨论】:

  • 不向文件打印任何内容,尽管它确实被创建了。
  • 使用&> 而不是>> 只是偏离标准输出,&> 同时偏离标准输出和标准错误
  • 哦,抱歉,我真的应该在发布之前测试一下...您必须在命令周围加上方括号,否则只会重定向最后一个命令,我将编辑我的答案...
  • 标准错误包含:“权限被拒绝(公钥)。致命:远程端意外挂断。”所以我猜它与密钥有关......
  • 感谢您的帮助。不知道 &> 语法,它有很大帮助。如您所见,另一个答案竟然解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
相关资源
最近更新 更多