Quantcast
Channel: openSUSE Planet - Global
Viewing all articles
Browse latest Browse all 23328

Marguerite Su: openshift 搭建和 IRC 频道互通的 Gtalk 群聊

$
0
0

Long long ago,大概八九个月前,看到翁学天的 ikde 群居然能和 IRC 互通,感觉很惊艳,于是也想弄一个替代现在的 opensuse_zh@im.partych.at。

Party Chat 是一个很好的免折腾 Gtalk 群聊主机服务,架设在 Amazon 上面,但是有以下缺点:

  • 不能和 IRC 互通。作为一个开源社区,要是没有利用上 IRC,总感觉少了点什么。
  • 在线时间不能保证。也就是说你没有 schduled_maintenance 的权利,只能它在线你就聊,它离线你就歇息。
  • 大于 300 人的群拒绝服务。也就是说你的群是顶着地雷的,到了 300 人整个群就会消失,因为 Party Chat 不能承担那些多出来的流量钱。你交钱也不给你提供额外服务。

所以几十个人的小社群还是可以应付的,但是人满了之后迁移成本特别大。所以就想着趁人少迁移到 ikde 那种高级群里去。

打听了一下,这种群聊是使用依云(@lilydjwg) 写的两个软件在 VPS 上搭建的,分别是xmpptalkircbindxmpp

但问题出来了,我没有 VPS。当时openshift这种 PaaS 已经出现了,只是还比较新鲜,我不会用。于是去年 9 月的一次尝试就可耻地失败了。

当时(甚至至今)网上关于这两个软件的文章只有两篇:

  • 依云自己的介绍性文章,但是太粗略了。
  • StarBrilliant 的稍微详细一些的文章,但是还是有点犯了程序员的通病:普通用户不知所云。如果你是一个已有 VPS 的博主,看了也得折腾一会儿,要是麻瓜的话,恐怕也就只能看个热闹了。

于是逼迫我们群里的 douglarek 写了一篇在 openshift 上折腾它们的文章给我:

但实际上这篇文章很水。反正看过就知道啦,到处都是「凑合」。实际上你看它也根本架设不起来(好多致命细节都没说)。

当时我就是在这种情况下开始折腾的。

首先我开了Do it yourself应用,然后进去编译,结果很悲剧,红帽给的内存太小,mongodb 编译不成功; 后来我使用Build Service模拟了一个 openshift 环境(一个 x86_64 的 RHEL),然后编译编译,我犯懒了…

今年三月份挖出了作者,又折腾了一个多礼拜,总算搞定了。下面是正文:

注册一个Do it yourself应用

注册、配置 ssh 和怎么使用 ssh 登入服务器的教学见 douglarek 和我之前几篇讲 openshift 的教学,都是最基本的英文,基本能注册 GMail 的都会弄,不能注册 GMail 的基本你也不能在墙外看见我的文章。

编译

基本的Do it yourself应用是带有以下部分的:Git,bz2/gz 的解压软件。所以你这些是不需要的。

ssh 进去之后,cd $OPENSHIFT_DATA_DIR,这个文件夹的完整位置是在app-root/runtime/data,当然你也可以使用echo $OPENSHIFT_DATA_DIR看到它的完整路径。

在这个文件夹里使用wget URL去下载源代码,git clone捡出 git 仓库。这些我都假设你已经知道了。

所有的编译过程都是源自依云的scripts/quick_install.sh,但是我更新了一些东西,所以最好还是看我的。

另外你也可以直接去github.com/marguerite/openshift-xmpptalk-ircbindxmpp-bundle/抓取我编译好的来用。

编译 Python 2.7

下载 python 2.7.3 和 3.3 的源代码(你看到这篇的文章的时候可能已经更新了,所以请去python.org下载最新版)。然后解压。

编译 2.7.3 是因为后面我们有个程序要用 2to3 把针对 Python 2 gen 写的代码转义到 Python 3 gen。

    mkdir python2.7 (我们要把最终的 python 2.7 装进去,因为你没有权限往 /usr 装)
    cd Python-2.7.3
    // 依云原版的多了个 `--with-computed-gotos`,但这个选项已经没有了,变默认了。另外一个 `--with-wide-unicode` 作废了,现在默认就是 long。
    ./configure --enable-shared --with-threads --enable-ipv6 --with-system-expat --with-system-ffi --prefix=${OPENSHIFT_DATA_DIR}/python2.7/
    make -j4
    make install

这样 python2.7 里就有 python 了。

编译 Python 3.3

这才是主依赖,因为依云的代码是基于 3.2 版 Python 写的。

    mkdir python3.3
    cd Python-3.3
    ./configure --enable-shared --with-threads --with-computed-gotos --enable-ipv6 --with-system-expat --with-system-ffi --prefix=${OPENSHIFT_DATA_DIR}/python3.3/
    make -j4
    make install

需要注意的就是:--prefix=${OPENSHIFT_DATA_DIR}/pythonX.X/一定要有,而且必须写在最后,否则不起作用。至于原因我也不知道,openshift 就是这样的。如果你看了 douglarek 的文章的话,你可能会知道一个${OPENSHIFT_RUNTIME_DIR},这个也作废了。

编译 python3-distribute

去 PYPI 下载distribute

这时编译需要用我们前面刚制作好的 python 3.3 来编译它。所以我们需要修改一下系统的 PATH 和 LD_LIBRARY_PATH 让系统能够找到 python3

    export PATH=${OPENSHIFT_DATA_DIR}/python3.3/bin:$PATH
    export LD_LIBRARY_PATH=${OPENSHIFT_DATA_DIR}/python3.3/lib:$LD_LIBRARY_PATH

这个export命令只对当前 Shell 有效,也就是说你 ssh logout 再登入,是要重新做的。

编译:

    cd distribute-0.6.35
    // 我们把所有的子模块都装到 python3.3 目录,下同
    python3 setup.py install --prefix=${OPENSHIFT_DATA_DIR}/python3.3/

编译 python3-dns

dnspython.org下载Python 3.x stable对应的软件包。我这时是 1.10.0,解压用unzip命令。编译方法同 distribute。

编译 pyxmpp2

要用依云修改的:

    git clone https://github.com/lilydjwg/pyxmpp2.git

这时需要注意的是,最新版有问题,我们要使用 b3a01f03a10e319a833d2f57639bb696790c930e 这个 commit 的版本:

    git checkout b3a01f03a10e319a833d2f57639bb696790c930e pyxmpp2

以后的编译方法同 distribute。

编译 pymongo

下载在PYPI

编译方法同 distribute。

安装 mongodb 的预制包

前面已经说了,在 openshift 上编译的话内存会耗尽,所以我们用编译好的。下载在mongodb.org,要下载 Linux 64-bit 的版本。

然后解压,把 bin 目录下的所有东西都复制到 python3.3/bin 中去就可以了:

    cp -r mongodb-*/bin/* python3.3/bin/

用 Python 2.7.3 安装 mongokit

下载github.com/namlook/mongokit.git

    git clone https://github.com/namlook/mongokit.git

因为要用 python 2.7.3 编译,所以我们要像前面一样把 python2.7/bin 和 python2.7/lib 导入到环境变量中去,具体方法见 distribute。但是安装的prefix仍是 python3.3 的。

编译:

    // 就这个不是 python3
    python setup.py install --prefix=${OPENSHIFT_DATA_DIR}/python3.3/

接着我们要做 2to3,方法是:

    cd python3.3/lib/python3.3/site-packages/mongokit-*-py3.3.egg/mongokit
    2to3 -w .

至此,xmpptalk 的依赖我们就安装完了。下面安装 ircbindxmpp 的。

编译 tornado

捡出地址在github.com/facebook/tornado。编译方法同 distribute。

下面我们的操作都将在python3.3/lib/python3.3/site-packages下进行。

取得一些winterpy的小脚本

    git clone https://github.com/lilydjwg/winterpy.git

然后把里面的pylib/myutils.pypylib/xmppbot.py复制到site-packages目录下,winterpy 就可以删掉了。

至此,ircbindxmpp 的依赖安装完毕。下面获取它们两个。

site-packages中捡出它们:

    git clone https://github.com/lilydjwg/xmpptalk
    git clone https://github.com/lilydjwg/ircbindxmpp

一些清理

如果你不准备未来升级你的程序的依赖,那么你可以把 python3.3 下除了binlib的文件夹全部干掉节省空间。也可以不干掉。

除了 python3.3 这个目录外的其它编译中间文件目录都可以rm -rf掉。

准备配置

你需要两个 xmpp 账户,一个用来做 Gtalk 群聊,比如 talk@suse.ws,另一个用来转发 IRC 上的消息,比如 irc@suse.ws。xmpp 账户怎么来你可以看 StarBrilliant 的文章学习配置prosody,也可以像我一样直接在我的 Google Apps 里新建两个账户(Google 的服务据说发送太多链接和说话太勤对方会收不到,但是目前我还没遇到)。所以我就用 Google Apps 为例了。怎么使用prosody我也不会,我的 bundle 里也没有 prosody 的依赖和主包,估计 openshift 在你不绑定域名(见我搭建 wordpress 那篇文章)的情况下也跑不起来(因为要设 SRV 记录,红帽提供的二级域名肯定没这功能)。

注册 Google Apps,需要你有一个个人持有的域名。这个教学我省略了,因为太多了。只讲几个新建账户的注意事项:

你建完账户是 temporary password,可以在该账户的明细里看到,首次登入是会要你改的,所以不要建完就去配置了,那样不会成功。一定要登入改密码。

如果你用 Google Apps 弄过 Gtalk 就知道需要设置一个 DNS 的 SRV 记录,才能在非 Google 的客户端比如 Pidgin 上登入。但是这段 SRV 记录并不全,你之所以能在 Pidgin 上登入是你告诉了 Pidgin 我这就是 Google Talk。xmpptalk 是不知道的,它会一直 ping 你的域名的 A 记录,但那上面通常都是个博客或者别的什么,肯定不是 xmpp 服务器。所以你要多加下面一段 SRV 记录,和 Google 给的一起,加到你的 DNS 服务商比如cloudns.net(不是每个 DNS 服务商都支持用 SRV 记录,至少我知道的免费的就这一个,反正你的域名注册商甚至共享主机商提供的 DNS 都不行),至于怎么改域名的 DNS 请自行搜索。

    _xmpp-client._tcp.你的域名. IN SRV 5 0 5222 xmpp-server.l.google.com.
    _xmpp-client._tcp.你的域名. IN SRV 20 0 5222 alt1.xmpp-server.l.google.com.
    _xmpp-client._tcp.你的域名. IN SRV 20 0 5222 alt2.xmpp-server.l.google.com.
    _xmpp-client._tcp.你的域名. IN SRV 20 0 5222 alt3.xmpp-server.l.google.com.
    _xmpp-client._tcp.你的域名. IN SRV 20 0 5222 alt4.xmpp-server.l.google.com.

至于各项的意思,搜索一下就能明白,反正 cloudns 是蛮简单的,就顺序填空…

等 DNS 刷新好了之后,然后请把两个账户相互加为好友。不然到了 ircbindxmpp 的时候,由于不是好友,转发机器人没法把 IRC 说的话转发到 Gtalk 群聊里去。

这样你的账户就准备好了。我们开始配置。

开始配置

我们需要改两个配置文件:site-packages中的xmpptalk/config.pyircbindxmpp/config.py。没有就把 config.py.example 复制一下:

    cp -r config.py.example config.py

下面先说 xmpptalk。

  • # TODO: your bot's JID:这个是要写群聊机器人使用的账户,比如 talk@suse.ws/bot
  • # TODO: your JID:这个是管理员的 Gtalk 账户,比如我的 marguerite@opensuse.org
  • TODO: type a random string below:这个需要一个随机字符串,可以用cat /dev/urandom | tr -dc A-Za-z0-9_ | fold -w 12 | head -5得到一堆。
  • # nick_change_interval = datetime.timedelta(days=10):这个是群成员改昵称的间隔,默认是 10 天。
  • # TODO: select a database:这里唯一需要改的是 host,不能用localhost,可以用echo $OPENSHIFT_INTERNAL_IP得到一个 IP 地址,用它。
  • warnv105 = True:这个改成 False,不然用 Gtalk 105 版的就会持续收到警告说你的客户端不安全之类的,但问题我们群里有台湾地区的用户,我们面临的问题人家不需要。
  • # TODO: the password of your bot:群聊机器人的密码。

这样就好了。其它的不用管(如果你用 Prosody 的话可能还需要管一个# Which IP to connect?)。[Update] 依云酱说一般不需要,这个是给 Prosody 不支持 IPv6 准备的,一般填也填 IPv6 地址。

然后你还需要新建一个 xmpptalk/mongodb.conf,指定数据库的存放位置和日志的存放位置,完整见下:

    dbpath=/var/lib/openshift/513c7ceb5973cab51b0002c5/app-root/runtime/data/openshift-xmpptalk-ircbindxmpp-bundle/data
    logpath=/var/lib/openshift/513c7ceb5973cab51b0002c5/app-root/runtime/data/openshift-xmpptalk-ircbindxmpp-bundle/log/mongodb.log
    logappend=true
    #auth = true
    smallfiles = true
    nojournal = true
    bind_ip = 127.5.76.1

其中/var/lib/openshift/513c7ceb5973cab51b0002c5/app-root/runtime/data/就是$OPENSHIFT_DATA_DIR,可以用echo $OPENSHIFT_DATA_DIR得到,openshift-xmpptalk-ircbindxmpp-bundle是我预制的那个 bundle(在 git 上),datalog是我自己建的。那个bind_ip就是前面刚讲的$OPENSHIFT_INTERNAL_IP。在配置文件中是不能使用 openshfit 预定义的宏的,因为使用这个配置的程序读不出。

然后新建一个start_mongo.sh来启动 mongod 的 daemon,内容如下:

    mongod --config ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/xmpptalk/mongodb.conf --fork

那个--config跟的也是 mongodb.conf 所在的完整路径。

ircbindxmpp 的配置:

  • targetJID = JID('talk@suse.ws'):这是你的群聊机器人的账户
  • BotJID = JID('irc@suse.ws/bot'):这是你的转发机器人的账户
  • 'channel': 'opensuse-cn',:你要互通的 IRC 频道
  • 'nick': 'SuSE-Lady':机器人在频道上的名字
  • 'realname': 'Gtalk Bot':机器人在频道说话时显示的名字,我们互通 Gtalk 自然叫 Gtalk
  • password = '':你的转发机器人的密码。

运行

export环境变量(如果你已经登出了的话)。

进入 xmpptalk 文件夹:

    // 启动数据库
    chmod +x start_mongo.sh
    ./start_mongo.sh
    // 初始化数据库
    python3 dbman.py
    // 运行群聊机器人
    nohup python3 main.py > ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/log/xmpptalk.log 2>&1 &

其中 nohup 是不让 python3 进程一直占用你的 shell,后面那一套是把返回在 shell 屏幕上的 runtime 日志给重定向到一个文件中去。不然的话,在你 ssh 退出之后,这些 python3 进程会被 openshift 杀死,你的群就掉线了。

这时您就可以加群聊机器人与其它人通过机器人聊天了。

进去 ircbindxmpp 文件夹:

    // 运行 IRC 转发机器人
    nohup python3 ircbindxmpp > ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/log/ircbindxmpp.log 2>&1 &

原理同上。这时您就可以在 IRC 频道里看到你的机器人上线了。

停止机器人:

    killall python3

简单粗暴但行之有效。

你也可以做个重启脚本restart.sh放在根目录下面(一般 mongodb 跑起来就不用我们去管它了,所以不包括这个):

    export PATH=${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/bin:$PATH
    export LD_LIBRARY_PATH=${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib:$LD_LIBRARY_PATH
    killall python3
    #killall mongod
    #mongod --config ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/xmpptalk/mongodb.conf --fork
    nohup python3 ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/xmpptalk/main.py > ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/log/xmpptalk.log 2>&1 &
    nohup python3 ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/ircbindxmpp/ircbindxmpp > ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/log/ircbindxmpp.log 2>&1 &

uncomment mongod 那两行可以连 mongod 一起重启。

特殊注意

是不是以为万事大吉了?还没呢…红帽说了,后台程序(在网页访问不到的),两天就会被idle。也就是说两天后两个机器人就都掉线了。怎么办呢?

Do-it-yourself应用的 Git(就是网页上让你 clone 的那个 URL)里面有一个 diy 文件夹,里面是一个 ruby 写的超小网页服务器,我们把那个跑起来,不就有一个非后台应用在跑了么?

    git clone ssh://*************@talk-**********.rhcloud.com/~/git/talk.git/

然后啥也不用干,直接 touch 个什么东西,提交回去就行了:[Update] 要改./openshift/action_hooks/{start,stop},不然提交的时候会停掉服务器上正在跑的程序只跑一个 ruby 的网页服务器。

    cd talk/.openshift/action_hooks/

在 start 尾部添加以下几行:

    export PATH=${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/bin:$PATH
    export LD_LIBRARY_PATH=${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib:$LD_LIBRARY_PATH
    nohup python3 ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/xmpptalk/main.py > ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/log/xmpptalk.log 2>&1 &
    nohup python3 ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/ircbindxmpp/ircbindxmpp > ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/log/ircbindxmpp.log 2>&1 &

在 stop 里面的 exit 0 上面插入一行:

    killall python3

然后提交:

    git add .
    git commit -m "initial commit"
    git push

然后 .openshift/action_hooks/start 就会在服务器跑,就会把那个网页服务器跑起来了。

额外

Prosody

这个确实不懂。不过需要提醒大家注意的一点是,如果你打算在 openshift 上编译并搭建它,你需要了解 openshift 不是每个端口都可以对外的。大部分你熟悉的端口都已经在内外两边都为官方应用保留了,内部你只可以用 15000 – 35530,对外只可以 bind 到 ${OPENSHIFT_INTERNAL_PORT} 也就是 8080,会通过 80 端口转发给外部。

群日志

在 mongodb 数据库里。可以用 mongoexport 导出。

[Update] 今天他们非要一个 IRC 日志,我就直接把日志做成 cron jobs 放到我们之前跑起来的那个 ruby 网页服务器上了。

把以下内容保存为log_to_web.sh,放在.openshfit/cron/dailychmod +x后提交:

    ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/bin/mongoexport --host ${OPENSHIFT_INTERNAL_IP}:27017 -d talk -c log --csv -f time,jid,msg -o ${OPENSHIFT_REPO_DIR}/diy/chat.log
    iconv -f UTF-8 -t GBK ${OPENSHIFT_REPO_DIR}/diy/chat.log -o ${OPENSHIFT_REPO_DIR}/diy/chat.txt
    mv ${OPENSHIFT_REPO_DIR}/diy/chat.log ${OPENSHIFT_REPO_DIR}/diy/chat1.txt
    killall ruby
    nohup $OPENSHIFT_REPO_DIR/diy/testrubyserver.rb $OPENSHIFT_INTERNAL_IP $OPENSHIFT_REPO_DIR/diy > $OPENSHIFT_HOMEDIR/diy-0.1/logs/diy_server.log 2>&1 &

解释下就是导出 log,转码为GBK(不然网页看 txt 是乱码,chat1.txt 还是 UTF-8 编码),然后重启网页服务器。

备份方案

你当然可以使用我在之前搭建 wordpress 的文章里讲的 snapshot 方法。不过下面介绍一种自动的:使用Dropbox-Uploader配合 openshift 的 Cron Cartridge。

首先在网页版的My Applications里点进去,然后进入你的Do-it-yourself应用,点add cartridge,加一个 Cron 1.4 的 cartridge。

然后 ssh 进你的应用程序:

    cd $OPENSHIFT_DATA_DIR
    git clone https://github.com/andreafabrizi/Dropbox-Uploader

然后把里面那个脚本复制到上级目录,文件夹可以删了。需要修改一个地方:

    sed -i "s/CONFIG_FILE=~/CONFIG_FILE=\./" ./dropbox_uploader.sh

不然会提示权限不够。再:

    chmod +x dropbox_uploader.sh
    ./dropbox_uploader.sh

一次,跟随设置。这样以后你就可以./dropbox_uploader.sh upload 文件了。

先备份一下我们整个的openshift-xmpptalk-ircbindxmpp-bundle吧。注意,以下所有脚本都是在 ${OPENSHIFT_DATA_DIR} 运行的。这是dump_all.sh脚本的内容:

    pushd ${OPENSHIFT_DATA_DIR}
    # 压缩整个 openshift-xmpptalk-ircbindxmpp-bundle 文件夹
    tar -cjvf openshift-xmpptalk-ircbindxmpp-bundle-`date +%Y-%m-%d`.tar.bz2 openshift-xmpptalk-ircbindxmpp-bundle/
    # 上传到 Dropbox
    ./dropbox_uploader.sh upload `ls | grep tar.bz2`
    # 删除 tar
    rm -rf openshift-xmpptalk-ircbindxmpp-bundle-*.tar.bz2
    popd

然后我们编写一个backup_data.sh备份脚本,需要备份的有数据库,config.py,mongodb.conf,和datalog文件夹,以及 mongodump 导出的群消息日志:

    # 备份 mongodb
    ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/bin/mongodump --host ${OPENSHIFT_INTERNAL_IP}:27017 -d talk -o ${OPENSHIFT_DATA_DIR}/backup/database/
    # 导出聊天记录
    ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/bin/mongoexport --host ${OPENSHIFT_INTERNAL_IP}:27017 -d talk -c log --csv -f time,jid,msg -o ${OPENSHIFT_DATA_DIR}/backup/chatlog.csv
    # 备份 config(s)
    mkdir -p ${OPENSHIFT_DATA_DIR}/backup/config/
    cp -r ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/xmpptalk/config.py ${OPENSHIFT_DATA_DIR}/backup/config/xmpptalk.config.py
    cp -r ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/ircbindxmpp/config.py ${OPENSHIFT_DATA_DIR}/backup/config/ircbindxmpp.config.py
    cp -r ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/lib/python3.3/site-packages/xmpptalk/mongodb.conf ${OPENSHIFT_DATA_DIR}/backup/config/
    # 备份 log(s)
    mkdir -p ${OPENSHIFT_DATA_DIR}/backup/log/
    cp -r ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/log/* ${OPENSHIFT_DATA_DIR}/backup/log/
    # 备份裸数据库
    mkdir -p ${OPENSHIFT_DATA_DIR}/backup/raw/
    cp -r ${OPENSHIFT_DATA_DIR}/openshift-xmpptalk-ircbindxmpp-bundle/data/* ${OPENSHIFT_DATA_DIR}/backup/raw/
    # 改名
    mv ${OPENSHIFT_DATA_DIR}/backup ${OPENSHIFT_DATA_DIR}/backup-`date +%Y-%m-%d-%H_%M_%S`
    pushd ${OPENSHIFT_DATA_DIR}
    tar -cjf `ls | grep backup-20`.tar.bz2 backup-*/
    # 上传
    ./dropbox_uploader.sh upload *.tar.bz2
    # 清理
    rm -rf backup-20*
    popd

现在是 cron 设置了。还记得刚才你弄的那个 talk 的 Git 吗?用那个去搞(以下命令是在本地的):

    cd talk
    cd .openshift/cron

能够看到下面有 minutely 什么的这样的文件夹。openshift 的 cron 就是把脚本扔到这样的文件夹里,就会按照文件夹名所说的时间来跑。我们的dump_all.sh一个月执行一次就好了,而backup_data.sh可以每天执行一次。于是就把那两个脚本也放到相应的文件夹里去(服务器上的是给你手动跑的),不要忘记chmod +x哦!然后:

    git add .
    git commit -m "scheduled backup"
    git push

完成,enjoy!

呜谢

  • 依云酱
  • douglarek

Viewing all articles
Browse latest Browse all 23328


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>