当下有很多黑客会攻击小网站,博主就遇到过被攻击删掉数据的情况,保险起见还是定时备份数据库数据,当然也可以设置白名单防止攻击者破解登录

ubuntu18安装vim和cron

编写文件的时候需要用到编辑器,安装常用的vim编辑器即可

首先登录mysql容器

~$ docker exec it izone_db bash

安装vim命令,报错了

~$ apt-get install vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim

更新软件源重新安装成功

~$ apt-get update
~$ apt-get install vim

接下来安装定时器cron

~$ apt-get install cron

重启cron

~$ /etc/init.d/cron restart

编写备份脚本

在/home目录下新建mysql_data文件,并且在mysql_data下新建mysql_databak.sh

~$ mkdir mysql_data
~$ touch ./mysql_data/mysql_databak.sh

执行命令vi mysql_databak.sh写入脚本

#!/bin/sh
OUT_DIR=/tmp/
LINUX_USER=root
DB_NAME=izone
DB_USER=root
DB_PASS=paswword
DAYS=7
cd $OUT_DIR
DATE=`date +%Y_%m_%d`
OUT_SQL="$DATE.sql"
TAR_SQL="mysqldata_bak_$DATE.tar.gz"
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME --default-character-set=utf8 --opt -Q -R --skip-lock-tables> $OUT_SQL
tar -czf $TAR_SQL ./$OUT_SQL
rm $OUT_SQL
chown $LINUX_USER:$LINUX_USER $OUT_DIR/$TAR_SQL
find $OUT_DIR -name "mysqldata_bak*" -type f -mtime +$DAYS -exec rm {} \;

此时单独执行mysql_databak.sh脚本发现/tmp文件下生成了备份文件,说明脚本正常,接下来开始配置定时任务

cron定时任务

新建定时命令

~$ crontab -e

写入语法并保存

# 每天下午16点02分执行
02 16 * * * /home/mysql_data/mysql_databak.sh

此时查看定时任务状态,可以看到有1条刚刚创建好的任务,表示设置任务成功

~$ cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
...
...
# m h  dom mon dow   command

02 14 * * * /home/mysql_data/mysql_databak.sh
no crontab for daemon
no crontab for bin
no crontab for sys
...
...

到任务执行时间后,查看/tmp下成功生成了备份文件

备份文件复制到主机

把容器备份好的sql复制到主机,新建文件夹和脚本

~$ mkdir mysql_backup
~$ touch copy_db.sh
#!/bin/sh
docker cp 7a0594f8d1d6:/tmp/ /home/ubuntu/mysql_backup/

给脚本赋权

~$ chmod 777 copy_db.sh

cron添加定时任务

~$ crontab -e
* */12 * * * /home/ubuntu/mysql_backup/copy_db.sh

查看任务是否生效

~$ cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}

问题总结

在配置定时任务时遇到了无法定时执行脚本的问题

1.给脚本赋权并可执行

~$ chmod +x /home/mysql_data/mysql_databak.sh
~$ chmod 777 /home/mysql_data/mysql_databak.sh

2.执行脚本报错格式不正确

# 报错信息
bash: ./mysql_databak.sh: /bin/sh^M: bad interpreter: No such file or directory

安装dos2unix,转行格式

~$ apt-get install dos2unix
~$ dos2unix mysql_databak.sh

3.系统时间有误,未执行定时任务

执行命令,同步时间

~$ dpkg-reconfigure tzdata
再选择Asia->Shanghai

4./var/log下未找到cron.log文件

一般服务器自带rsyslog(docker需要自己安装,安装命令 apt-get install rsyslog ),再修改/etc/rsyslog.d/50-default.conf文件,将 rsyslog 文件中的 #cron.* 前的 # 删掉,然后重启rsyslog和cron

service rsyslog restart
service cron restart

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://zhangyanc.club/article/docker-crontab/

许可协议:署名-非商业性使用 4.0 国际许可协议