SVN Обновление Crontab Linux - PullRequest
       10

SVN Обновление Crontab Linux

0 голосов
/ 25 августа 2011

Я пытаюсь выяснить, как запустить команду SSH через cron для Linux. Команда, которую я хочу выполнить:

svn update /path/to/working/dir

Что-то вроде:

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

Кто-нибудь знает, что мне нужно делать с линией cron?

РЕДАКТИРОВАТЬ: мне не нужен SSH, просто нужно запустить svn update на том же сервере, что и cron, в рабочий каталог.

РЕДАКТИРОВАТЬ 2: То, что я искал, было:

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

Я сформулировал это неправильно, спрашивая слишком конкретно о SSH, поэтому я удостоил ответ, который конкретно говорит о cron через SSH, но если кто-то хочет знать, как это сделать локально, вам не нужен SSH.

Ответы [ 3 ]

3 голосов
/ 17 октября 2011

Вы должны сравнить переменные среды.Я написал для этого простой сценарий 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 состоит в том, чтобы установить переменные окружения в bash-скрипте обновления svn на те, которые получены вручную, это должно выглядеть примерно так (parts 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
0 голосов
/ 08 мая 2019

Я столкнулся с той же проблемой, когда я редактировал crontab, как пользователь root. У меня есть рабочая копия в моей домашней (/home/myname/project) директории, и я отредактировал crontab как myname пользователь, и это сработало.

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

svn.sh имеет следующие строки

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

0 голосов
/ 25 августа 2011

Вам необходимо передать имя хоста (а также имя пользователя, если вы не хотите войти в систему как root) в SSH:

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

Также см. ssh --help для получения дополнительной информации.

Обратите внимание, что вам нужно будет ввести пароль с помощью SSH, если только вы не настроили свой SSH , чтобы иметь возможность войти без пароля

...