【问题标题】:SVN Update Crontab LinuxSVN 更新 Crontab Linux
【发布时间】:2011-11-03 21:49:40
【问题描述】:

我想弄清楚如何通过 cron 为 linux 运行 SSH 命令。我要运行的命令是:

svn update /path/to/working/dir

类似:

*/1 * * * * root ssh svn update /path/to/working/dir

有人知道我需要对 cron 行做什么吗?

编辑:我不需要它是 SSH,只需要在与 cron 相同的服务器上运行 svn update 到工作目录。

编辑 2:我正在寻找的是:

*/1 * * * * svn update /path/to/your/working/copy

虽然我措辞不正确,对 SSH 的询问过于具体,所以我给出了专门通过 SSH 讨论 cron 的答案,但如果有人想知道如何在本地进行操作,则不需要 SSH。

【问题讨论】:

  • 确定一下,您真的想每分钟更新一次吗?我可以看到一个非常不满意的存储库。
  • 只是一个例子,但希望经常这样做,因为有些人会使用服务器而不是本地进行测试。如果它大部分时间都没有真正更新任何东西,它真的会导致一个巨大的问题吗?
  • 好吧,每次你尝试这个,你都在打开一个到 SvN 服务器的连接——一个必须维护和关闭的连接,它吃服务器资源。我不会每分钟都这样做。

标签: linux svn ssh crontab


【解决方案1】:

您需要将主机名(以及用户名,除非您想以 root 身份登录)传递给 SSH:

*/1 * * * * root ssh user@hostname svn update /path/to/working/dir

另请参阅ssh --help 了解更多信息。

请注意,您需要使用 SSH 输入密码,除非您使用 setup your SSH 无需密码即可登录

【讨论】:

  • 你会如何传递密码呢?那是安全的还是您推荐另一种自动运行 svn 更新的方式?
  • 如何将密码传递给它? 您可以使用生成的密钥。 man ssh-keygen 了解更多信息。您需要为服务器和客户端运行它。它在.ssh 目录中生成公钥和私钥。将公钥添加到服务器的.ssh 目录下的authorized_keys
  • 这对远程非常有用,但如果只是本地需要,则没有必要。我已经为本地发布了上面的答案。不过,因为我专门询问了 SSH 和 cron,所以我授予了这个答案。
【解决方案2】:

您必须比较环境变量。我已经为我编写了一个简单的 bash 脚本:

#!/bin/bash
env
echo $PATH
type -a svn
cd /home/<username>
svn info
exit 0

并将其保存在/home//crontest.sh中

然后你手动执行代码并将结果写入文件:

/home/<username>/crontest.sh > /home/<username>/hand_env

然后在你的 crontab 中:

* * * * * /home/<username/crontest.sh > /home/<username>/cron_env

之后你有了两个文件,你可能会看到环境变量之间存在一些差异。

svn 和 cron 问题的解决方案是将 svn update 的 bash 脚本中的环境变量设置为手动获取的环境变量,它应该看起来像这样(第 2 部分>/dev/null 和 exit 0 非常重要):

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X$
export MAIL=/var/mail/root
export _=/usr/bin/env
export PWD=/home/tv
export LANG=en_US.UTF-8
export HOME=/home/tv
export SHLVL=2
export LOGNAME=root
#export LESSOPEN=| /usr/bin/lesspipe %s
#export LESSCLOSE=/usr/bin/lesspipe %s %s
export SHELL=/bin/bash
svn update https://localhost/svn /var/www/<dir> 2>/dev/null
exit 0

例如写这个脚本。 /etc/init.d/skrypty/cron.sh 然后你只需放入你的 crontab(我已经以 root 身份完成了)

* * * * * /etc/init.d/skrypty/cron.sh >/dev/null 2>&1

【讨论】:

    【解决方案3】:

    我曾以root 用户的身份编辑 crontab 时遇到过同样的问题。我的主 (/home/myname/project) 目录下有工作副本,我确实以 myname 用户身份编辑了 crontab,它工作正常。

    0 22 * * * bash /home/myname/svn.sh

    svn.sh 有以下几行

    #!/bin/sh svn up /home/myname/project

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 2016-03-01
      • 2010-12-04
      • 2016-09-24
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多