簡體   English   中英

SVN更新Crontab Linux

[英]SVN Update Crontab Linux

我試圖弄清楚如何通過cron for 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,則不需要SSH。

您必須比較環境變量。 我寫了一個簡單的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並退出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

我曾以root用戶身份編輯crontab時遇到同樣的問題。 我的主目錄( /home/myname/project )下有工作副本,並且確實以myname用戶身份編輯了crontab,並且可以正常工作。

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

svn.sh具有以下幾行

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

您需要將主機名(以及用戶名,除非要以root用戶身份登錄)傳遞給SSH:

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

另請參閱ssh --help以獲得更多信息。

請注意,除非已將SSH設置為無需密碼即可登錄,否則您需要使用SSH輸入密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM