备份脚本
vim mysql_backup.sh
#!/bin/bash
source /etc/profile
source ~/.bash_profile
# 保存的目录
data_dir="****"
# 保存文件的名字,注意date是用#倒引号#包起来的
data_name="bak_`date +%Y%m%d%H`.sql"
if [ ! -d $data_dir ]; then
mkdir -p $data_dir
fi
# mysqldump备份命令
# -uroot 用户名
# -p123456 密码
# test 数据库名称
mysqldump -uroot -p123456 test > $data_dir/$data_name
备份文件
vim remove_backup.sh
#/bin/bash
source /etc/profile
source ~/.bash_profile
# 保存的目录
data_dir="****"
# 删除7天前的备份文件
find $data_dir -mtime +7 -type f -name "bak_*.sql" -exec rm -rf {};
解释:
$data_dir --设置查找的目录;
-mtime +7 --设置时间为7天前;
-type f --设置查找的类型为文件;
-name "bak_*.sql" --设置文件名称中包含sql;
-exec:固定写法
rm -rf:强制删除文件,包括目录
{} ; :固定写法,一对大括号+空格+
atime、ctime、mtime
atime:访问时间(access time),指的是最后一次访问文件或目录的时间;
ctime:变更时间(change time),指的是最后一次改变文件或目录 ( 改变的是原数据即 : 属性 ) 的时间 ;
mtime:修改时间(modify time),指的是最后一次修改文件或目录的时间;
使用stat命令可以查看三时间值:如 stat filename
find以时间为条件查找
mtime参数如下:
-mtime n 按照⽂件的更改时间来找⽂件,n为整数。
n 表⽰⽂件更改时间距离为n天
-n 表⽰⽂件更改时间距离在n天以内
+n 表⽰⽂件更改时间距离在n天以前
例如:
-mtime 0 表⽰⽂件修改时间距离当前为0天的⽂件,即距离当前时间不到1天(24⼩时)以内的⽂件。
-mtime 1 表⽰⽂件修改时间距离当前为1天的⽂件,即距离当前时间1天(24⼩时-48⼩时)的⽂件。
-mtime+1 表⽰⽂件修改时间为⼤于1天的⽂件,即距离当前时间2天(48⼩时)之外的⽂件
-mtime -1 表⽰⽂件修改时间为⼩于1天的⽂件,即距离当前时间1天(24⼩时)之内的⽂件
赋权限
chmod 755 ***.sh
定时任务
crontab -e
0 */2 * * * root mysql_backup.sh #每2小时
0 1 * * * root remove_backup.sh # 每天凌晨1点,自动删除7天前的备份
shell脚本手动执行没问题,crontab定时执行失败
问题描述:
Shell脚本手动执行可以正常运行,并得到正确结果;使用Crontab定时调度的时候,Shell脚本执行出来的结果数据量为0。
原因:
Linux下用crontab执行定时任务不会缺省的从用户profile文件中读取环境变量参数,所以经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。这是因为用户登陆Linux操作系统的时候,”/etc/profile”, “~/.bash_profile”等配置文件会被自动执行,而crontab定时调度的时候可能不会执行配置文件。
解决方案:
Shell脚本缺省的 #!/bin/sh 开头换行后的第一行添加
source /etc/profile
source ~/.bash_profile