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" ;
atime、ctime、mtime
atime:访问时间(access time),指的是最后一次访问文件或目录的时间;
ctime:变更时间(change time),指的是最后一次改变文件或目录 ( 改变的是原数据即 : 属性 ) 的时间 ;
mtime:修改时间(modify time),指的是最后一次修改文件或目录的时间;
使用stat命令可以查看三时间值:如 stat filename
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



