Linux定时任务

 

以数据库备份为例编写一个定时任务

编写定时任务调用的脚本

cat /home/mysql/data/mysql_backup/mysqlbackup.sh


#定义使用哪种sh解释器来解释脚本
#!/bin/bash

mysql_home=/home/mysql/mysql-5.7.23
mysql_socket=/home/mysql/mysql-5.7.23_data/mysql.sock

cd /home/mysql/data/mysql_backup/

#记录开始备份的时间
echo "start_backup_time is `date`" >> /home/mysql/data/mysql_backup/dbfullbak.log
#执行数据库备份 当socket文件写入my.cnf时 不需要配置
$mysql_home/bin/mysqldump -u用户名 -p密码 --socket=$mysql_socket 要备份的数据库名 表名1 表名2 --default-character-set=utf8  > /home/mysql/data/mysql_backup/dbfullbak_`date +%F`.sql &&
#记录完成数据库备份脚本的时间
echo "backup complete `date`"
#压缩备份好的sql文件
gzip /home/mysql/data/mysql_backup/dbfullbak_`date +%F`.sql &&
#记录压缩完成的时间
echo "gzip complete `date`"
#删除符合模版文件名的且修改日期在30天前的文件 --->只保留最近30天的备份
find . -name "dbfullbak*.sql.gz" -type f -mtime 30 |xargs rm -rf
#记录删除备份的时间
echo "delete previous backup complete `date`"
#记录完成备份的时间
echo "stop_back_time is `date`" >> /home/mysql/data/mysql_backup/dbfullbak.log
#分割线   与上次做分隔  便于查看
echo "------------------------" >> /home/mysql/data/mysql_backup/dbfullbak.log
#发邮件提醒备份完成时间 请查看另一篇文章-mail命令
echo "stop_back_time is `date`" | mail -s "备份成功" XXX@qq.com

#设置脚本执行权限
chmod u+x /home/mysql/data/mysql_backup/mysqlbackup.sh

编写定时任务脚本


cat mysqlbackup.cron

# 第一个是cron表达式 第二个是要执行的脚本
# 对于&1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
# 对于2 ,表示标准错误,stderr。
# 2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /home/mysql/data/mysql_backup/dbfullbak.log。那么标准错误也会输出到/home/mysql/data/mysql_backup/dbfullbak.log

0 3 * * * /home/mysql/data/mysql_backup/mysqlbackup.sh >> /home/mysql/data/mysql_backup/dbfullbak.log 2>&1

添加定时任务至系统

crontab mysqlbackup.cron >~/log

查看所有定时任务

crontab -l

注意

  • cron中 默认不会加载用户环境变量 所以一般要使用绝对路径 但是可以添加. /etc/profile ,. ~/.bash_profile 来使脚本读取环境变量(没试过)