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