Windows 下WSL使用CRONTAB自动更新SVN

项目的关系,每次都要更新好几个文件夹比较麻烦,而且刚好已经安装好了WSL( Windows Subsystem for Linux )因此开始折腾起了自动更新的工作,使用的是crontab服务。此文介绍如何在WSL中配置crontab服务以及遇到的一些问题。

安装以及配置

  1. 检查是否已经安装了svn,如果没有安装,使用 sudo apt install subversion进行安装,无需关注版本问题。

  2. 检查cron服务是否开启,service cron status,如果未开启,使用service cron start 如果出现权限问题,前面加上sudo

  3. 编写自动更新脚本,可以参照一下脚本。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/bash
    export LANG=zh_CN.UTF8
    # 以下所有路径,建议写完整路径
    echo `date` >> /home/lzrain/autoupdate.log
    WorkingPath=/mnt/h/S3Project
    w_client=$WorkingPath/client
    w_data=$WorkingPath/data
    w_design=$WorkingPath/design
    w_publish=$WorkingPath/publish

    # echo ".......update $w_client......."
    # svn up $w_client
    echo ".......update $w_data........."
    svn up $w_data
    echo ".......update $w_design ........."
    svn up $w_design
    echo ".......update $w_publish ........."
    svn up $w_publish
    # 写完保存,在终端中使用一下命令改变权限,使其成为可执行文件
    chmod +x /mnt/z/autoupdate.sh # 需要将文件路径改为你所保存的文件路径
  4. 使用locale -a检查当前系统语言包是否有zh_CN.UTF8,如果没有,则需要进行安装,不然SVN会出现错误。

    1
    2
    3
    4
    # 使用一下语句安装语言环境
    sudo apt install language-pack-zh-hans-base
    locale -a
    # 如果看到zh_CN.utf8证明安装成功
  5. 使用crontab配置cron自动脚本

    1
    2
    3
    4
    5
    6
    sudo crontab -u username -e
    # 在最后一行填写以下代码
    */5 8-22 * * * /mnt/z/autoupdate.sh >> /home/lzrain/autoupdate.log 2>&1
    # */5 每隔5分钟执行
    # 8-22 每天8点到22点执行
    # 2>&1 重定向错误输出到标准输出,也就是将所有信息都写到 /home/lzrain/autoupdate.log 文件中
  6. 确定检查没有错误之后,建议将 crontab 进行修改,加入自动删除Log文件的逻辑,防止log文件太大.

    1
    2
    3
    4
    # 完整的crontab配置如下
    # 每天8-22点每隔15分钟执行更新操作,最好根据自己的更新频率进行调整
    */15 8-22 * * * /mnt/z/autoupdate.sh >> /home/lzrain/autoupdate.log 2>&1
    * 23 * * * echo "" > /home/lzrain/autoupdate.log # 每天23点将autoupdate.log的内容置为"";

错误处理

  1. 出现 svn:E000022: Error converting entry in directory 错误,请参照上面的步骤 4 安装 zh_CN.UTF8 语言环境

    1
    2
    3
    4
    # 类似错误打印信息如下
    svn: E000022: Error converting entry in directory '*****' to UTF-8
    svn: E000022: Can't convert string from native encoding to 'UTF-8':
    svn: E000022: A_{U+58F0}{U+97f0}
  2. 若出现svn: warning: cannot set LC_CTYPE locale 错误,同样参照之前步骤4安装 zh_CN.UTF8 语言环境即可解决。

  3. 若已经安装了zh_CN.UTF8语言环境,还是出现UTF8编码问题,请检查脚本中是否加入了 export LANG=zh_CN.UTF8