背景知识简介
DooTask
是一款轻量级的开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具。
这款轻量级的管理软件非常适合小团队使用,它相比较市面上常见的项目管理软件我认为最大的优点在于它没有花里胡哨的软件功能非常容易聚焦任务本身。
目前我也尝试在自己管理的团队当中小范围试用了起来,大家对它的反馈都非常积极。(PS:可能是之前使用的是禅道
大家可能觉得它用起来并不是非常好用而且它的颜值确实有点不太符合年轻人的审美 哈哈。)
DooTask
安装说明
第一步 确定硬件配置
首先我们需要确保硬件环境是符合要求的。
- 必须安装:Docker 和 Docker Compose v2.0+
- 支持环境:Centos/Debian/Ubuntu/macOS
- 硬件建议:2核4G以上
这里需要注意,Docker Compose是需要V2.0版本以上的,V2.0一下的版本是没办法使用的,这里大家自行百度升级一下即可。
第二步 部署项目
1 2 3 4 5 6 7 8 9 10 11 12 13
|
git clone --depth=1 https://github.com/kuaifan/dootask.git
git clone --depth=1 https://gitee.com/aipaw/dootask.git
cd dootask
./cmd install
|
当执行./cmd install
后稍等一会就会跳出管理员账户以及密码。
第三步 配置备份脚本
个人觉得既然是公司的项目数据还是安全一些为好,所以写一个备份的脚本还是有必要的。
脚本分为两个文件,一个文件为dootask_backup.sh
另一个文件为file_backups_conf.txt
。也就是一个是脚本文件另一个为配置脚本的文件,这样大家只需要去修改配置文件中的备份路径就可以了不用再去脚本中找要改的地方。
file_backups_conf.txt配置
实际使用的时候将#
后面的注释去除,以免出现配置文件不识别的问题。
另外需要注意的是如果在Windows下编辑的配置文件每行结尾会变是<换行><回车>
也就是\n\r
,这会导致脚本识别错误,所以Windows用户编辑完还需要执行清除\r
的命令,如果是在Linux下创建的文件就不需要执行修改命令。
1 2 3
| cat file_backups_conf.txt | tr '\n' ' '
|
1 2 3 4 5 6
| backupmysql=/root/dootask/docker/mysql/backup savebackupmysql=/backup backupFilePath=/root/dootask/public/uploads saveBackupFilePath=/backup fileName=upload_dootask backupsFileDay=4
|
dootask_backup.sh配置
大家需要注意的是这里演示的脚本中默认放在root文件夹中的,如果大家并不是放在这个文件夹中需要修改一下第4行的cd路径,这个cd是给crontab这个调皮程序用的,它每次执行就是在它那个目录下,这会导致很多软件中没有软连接的命令无法使用。
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 74 75 76 77 78 79 80 81 82
| #!/bin/bash
cd /root/dootask
file_backups_conf="/root/dootask/file_backups_conf.txt"
if [ -f "${file_backups_conf}" ];then echo $(date +'%Y-%m-%d %H:%M:%S')" 要备份的文件存在,开始进行文件备份" dbArrOne=($(awk -F'[=]' '{print $1}' ${file_backups_conf} )) dbArrTwo=($(awk -F'[=]' '{print $2}' ${file_backups_conf})) declare -A map=() for((i=0;i<${#dbArrOne[@]};i++)) do map[${dbArrOne[i]}]=${dbArrTwo[i]} done
saveday=$(date +%Y%m%d) delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d)
./cmd mysql backup echo $(date +'%Y-%m-%d %H:%M:%S')" 备份文件:"${map["backupmysql"]} echo $(date +'%Y-%m-%d %H:%M:%S')" 备份目标:"${map["savebackupmysql"]} if [ -f "|${map['savebackupmysql']}/${saveday}/${map['fileName']}_$(date +'%Y%m%d%H%M%S')" ];then cp -f -r ${map["backupmysql"]} ${map["savebackupmysql"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/ else mkdir -p ${map["savebackupmysql"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S') cp -f -r ${map["backupmysql"]} ${map["savebackupmysql"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/ fi echo $(date +'%Y-%m-%d %H:%M:%S')" 删除备份文件:"${map["savebackupmysql"]}/${delday} rm -f -r ${map["savebackupmysql"]}/${delday} rm -f -r ${map["backupmysql"]} echo $(date +'%Y-%m-%d %H:%M:%S')" 文件备份完毕,脚本执行完毕"
echo $(date +'%Y-%m-%d %H:%M:%S')" 备份文件:"${map["backupFilePath"]} echo $(date +'%Y-%m-%d %H:%M:%S')" 备份目标:"${map["saveBackupFilePath"]} if [ -f "|${map['saveBackupFilePath']}/${saveday}/${map['fileName']}_$(date +'%Y%m%d%H%M%S')" ];then cp -f -r ${map["backupFilePath"]} ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/ else mkdir -p ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S') cp -f -r ${map["backupFilePath"]} ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/ fi echo $(date +'%Y-%m-%d %H:%M:%S')" 删除备份文件:"${map["saveBackupFilePath"]}/${delday} rm -f -r ${map["saveBackupFilePath"]}/${delday} echo $(date +'%Y-%m-%d %H:%M:%S')" 文件备份完毕,脚本执行完毕" else echo "配置文件不存在" fi
echo "脚本执行结束"
|
第四步 将脚本添加到crontab软件中
执行crontab -e
显示和编辑crontab
文件,在这里头我们添加一下命令。该任务每次执行的时候会自动打印日志到dootask.log
该文件中。
1
| 00 3 * * * /root/dootask/dootask_backup.sh >> /backup/log_docker/dootask.log
|
对于crontab的定时任务配置简单举几个例子:
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令
*/15 * * * * ls 每15分钟执行一次ls命令
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令
第五步 验证脚本是否正常执行
我这里设置的是凌晨3点触发脚本执行,大家实际调试的时候自己根据crontab
命令调整一下时间来加快验证定时任务是否起作用。
不会这里细心的你肯定会发现定时触发的脚本在备份数据库时候总是不对,备份出来的数据库文件只有1Kb左右,但是手动触发.sh脚本没有这个问题。
其实这个原因是DooTask
的作者在他的cmd脚本文件夹中对Docker
的命令都带上了-it
交互模式参数,这个命令是没办法后台静默运行的,这会导致crontab
不能按照我们预期进行执行。
在这里我们需要肯定一点的是,去除 -it
交互模式参数其实并不会影响到DooTask
的运行,我们可以放心大胆的修改。
打开DooTask
文件夹中的cmd
文件,找到docker exec -it "$name" /bin/sh -c "$cmd"
将其修改为docker exec "$name" /bin/sh -c "$cmd"
即可。
再次让crontab
按计划触发脚本,此时我们就会注意到数据库文件已经和手动备份出来的文件大小一致了,到此整个Dootask
软件安装结束。
参考文章