点击显示更新信息 2020.08.21 更新 设置 CHECKERS 为 16,TRANSFERS 为默认值(4) 更改 rclone 运行 CPU 优先级和 IO 优先级(nice: 19, ionice: 7) 添加 Github Gist 之前写了篇在手机上使用 rclone 挂载网盘 的教程,文末附带了个备份脚步,最近看 rclone 文档新发现了几个参数,可以优化下之前的脚本,索性新开一篇文章记录以下。
备份脚本 之前的脚本用于备份其实还是可以的,只是要备份的路径是写死的,如果要增加就得修改脚步,也没办法排除某个或某类文件。新版主要增加的就是备份目录的配置,使用另一个文件存储备份目录,并且支持简单的正则过滤。这主要得益于 rclone 的 include(-from)、exclude(-from)、filter(-from) 参数,其功能基本可以从名字看出来,include 是包含,exclude 是不包含,filter 则是两者都有,带 from 则是从文件中读取规则。
脚本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 #!/system/bin/env bash set -xeif pidof -o %PPID -s "syncone" ; then exit 1 fi LANG=en_US.UTF-8 TZ=Asia/Shanghai export RCLONE=/data/data/com.termux/files/usr/bin/rcloneexport SOURCE=/sdcardexport REMOTE_NAME=loveexport REMOTE_DIR=/snapshotexport RCLONE_UPDATE=true export RCLONE_FAST_LIST=true export RCLONE_CHECKSUM=true export RCLONE_IGNORE_ERRORS=true export RCLONE_TRACK_RENAMES=true export RCLONE_NO_UPDATE_MODTIME=true export RCLONE_TRANSFERS=10export RCLONE_LOG_LEVEL=INFOexport RCLONE_LOG_FILE=/sdcard/rclone.logexport RCLONE_BACKUP_DIR="${REMOTE_NAME} :/old_files" export RCLONE_SUFFIX="_$(date +%Y-%m-%d_%H%M%S) " export RCLONE_SUFFIX_KEEP_EXTENSION=true export RCLONE_FILTER_FROM=/sdcard/ADM/Scripts/rclone-filters.txttimeout=5 target=www.baidu.com ret_code=`curl -I -s --connect-timeout $timeout $target -w %{http_code} | tail -n1` if [ "${ret_code} " = "200" ]; then termux-tools termux-tts-speak "网络连接正常,开始备份!" echo "网络连接正常,开始备份!" ${RCLONE} sync ${SOURCE} ${REMOTE_NAME} :${REMOTE_DIR} termux-tools termux-tts-speak "rclone 备份完成!" echo "备份完成!" else termux-tools termux-tts-speak "网络连接异常,停止备份!" echo "网络连接异常,停止备份!" fi
如果没有安装 bash 需要把第一行的 bash 换成 sh,另外 termux-tools 是我封装的 Termux-API 的功能,需要安装 Termux 和 Termux-API,并把 termux-tools 文件放在系统 PATH 中(/system/bin 或 /system/xbin,或则指定文件路径),如果没有可以注释掉。
termux-tools 文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/system/xbin/bash export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/libexport PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/appletscase $1 in termux-tts-speak) termux-tts-speak ${@:2} ;; termux-toast) termux-toast ${@:2} ;; termux-wallpaper) termux-wallpaper ${@:2} ;; esac
过滤规则文件 rclone-filters.txt 内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 - *.bak - /ADM/.config/EntWare/** + /.fooView/** + /ADM/** + /baidu/** + /MyAndroidTools/** + /Pictures/** + /ViPER4Android/** + /Xposed_Edge_Icon/** + /YueDu/** + /YueDu3.0/** + /习/** - *
每行一个,减号 -
代表排除,加号 +
代表包含,/
为根目录,即脚本中 ${SOURCE}
指定的目录,如果使用了包含规则需在最后一行添加 - *
, * 匹配所有目录,不包含子目录,** 匹配所有目录包扩子目录。
规则具体怎么用可以去官网查看 Rclone Filter 。
定时任务 光有备份脚步还不行,还得有定时任务来定时执行备份任务,毕竟每天手动执行备份也太麻烦了。定时任务我用的 Linux 比较常用的 crontable, Android 默认是没有的,但是可以安装 busybox 使用 busybox 的,而我所用的 ROOT 权限管理软件 Magisk 刚好自带了 busybox 可以直接使用。使用 contable 需要先启动其守护程序 crond,可以利用 Magisk 的功能,在 /data/adb/service.d 目录创建个文件,填入以下内容(也可以放在已安装模块的 service.sh 文件中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/system/bin/sh MODDIR=${0%/*} while [[ ! -d "/sdcard/Android" ]]do sleep 10 done crond -L /sdcard/crontabs/crond.log -c /sdcard/crontabs
然后去手机内置存储创建 crontabs 文件夹,在 crontabs 目录创建个 root 文件在里面填写即可。我设置的是每天晚上十点执行一次备份,内容如下
1 10 22 * * * bash /sdcard/ADM/Scripts/syncone >/dev/null 2>&1
除了使用 crontab 外还可以使用其它有定时执行 shell 功能的应用定时执行备份脚本即可,如 Tasker、fooView、Xposed edge 等。