文章目录
背景
最近用了几年的学生机服务器快过期了,就瞅活动便宜升级了一台轻量级的2核4G、5M的云服务器,但是后来发现轻量级服务器无法使用自动备份快照!!!这可咋整,虽然个人没有什么太重要的数据需要保存,但是MySQL里面还是有点货的、还有一些其他的东西需要自动备份,就想着自己写个脚本,定时把需要备份的东西,分别推到Git仓库里,有的用比没的好。
cron简介
在Linux系统中,计划任务一般是由 cron 承担,我们可以把 cron 设置为开机时自动启动。cron 启动后,它会读取它的所有配置文件(全局性配置文件 /etc/crontab ,以及每个用户的计划任务配置文件),然后 cron 会根据命令和执行时间来按时来调用度工作任务。
cron 是一个 linux 下的定时执行工具,可以在无需人工干预的情况下运行作业。由于 cron 是 Linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务。
基本运行命令
# 启动服务
service cron start
# 关闭服务
service cron stop
# 重启服务
service cron restart
# 重新载入配置
service cron reload
# 查看状态
service cron status
定时规则示例
# 每五分钟执行
*/5 * * * *
# 每小时执行
0 * * * *
# 每天执行
0 0 * * *
# 每周执行
0 0 * * 0
# 每月执行
0 0 1 * *
# 每年执行
0 0 1 1 *
查看定时任务
crontab -l
创建定时任务
crontab -e
选择适合你的编辑器,这里选用的是2。
# 在文档下方填入定时任务(并将正确和错误的日志都输入到以下目录文件中)
*/5 * * * * /docker/docker-data-backup-gz-001.sh > /var/log/docker-backup.log 2>&1 &
脚本日志输出
如果crontab不重定向输出,并且crontab所执行的命令有输出内容的话,是一件非常危险的事情。因为该输出内容会以邮件的形式发送给用户,内容存储在邮件文件
/var/spool/mail/$user
,如果命令执行比较频繁(如每分钟一次),或者命令输出内容较多,会使这个邮件文件不断追加内容,文件越来越大。而邮件文件一般存放在根分区,根分区一般相对较小,所以会造成根分区写满而无法登录服务器。
不输出任何内容
*/5 * * * * /docker/docker-data-backup-gz-001.sh &>/dev/null 2>&1
将正确和错误日志都输出到 /var/log/docker-backup.log
*/5 * * * * /docker/docker-data-backup-gz-001.sh > /var/log/docker-backup.log 2>&1 &
只输出正确日志到 /var/log/docker-backup.log
*/5 * * * * /docker/docker-data-backup-gz-001.sh > /var/log/docker-backup.log &
# 等同于
*/5 * * * * /docker/docker-data-backup-gz-001.sh 1> /var/log/docker-backup.log &
只输出错误日志到 /var/log/docker-backup.log
*/5 * * * * /docker/docker-data-backup-gz-001.sh 2> /var/log/docker-backup.log &
指令说明
/dev/null 代表空设备文件
>
是把输出转向到指定的文件,如文件已存在的话也会重新写入,文件原内容不会保留。
>>
是把输出附向到文件的后面,文件原内容会保留下来。1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
查看cron日志
tail -f /var/log/syslog