人若无名,便可专心练剑

 crontab 标签

linux定时清除30天前的备份文件(默认保留30天的备份)

  |   0 评论   |   2,166 浏览

每个小时备份一次的的数据进行清理


#!/bin/bash
sql="`ls /opt/backup/database/ -al|awk '{print $9}'|grep '[0-9]'`"
total="`ls /opt/backup/database/ -al|awk '{print $9}'|grep '[0-9]'|wc -l`"
deletesql="`ls /opt/backup/database/ -al|awk '{print $9}'|grep '[0-9]'|head -24`"
basepath="/opt/backup/database"
if [ $total -gt 720 ]; then
        for item in $deletesql
        do
                echo "delete_sql_begin..................."
                echo "删除$item"
                rm -rf "$basepath/$item"
                echo "delete_sql_end....................."
        done
else
        echo "备份文件总数为$total个暂未超量,不需要进行清理"
fi
exit 0;


日志格式:2014-04-16-23:00:02_xxx.sql


定时执行脚本,每天执行一次就ok拉


0 0 */1 * * /bin/bash /opt/backup/bin/clean.sh


linux定时任务crontab的使用

  |   0 评论   |   2,309 浏览

linux上有很多工具对于我们每个用户来说总是很方便,而且简单易学,短小精悍^-^

crontab linux定时任务命令:

其服务的使用我们使用如下命令进行开启和关闭或者重新加载

开启服务:

service crond start 或者 /etc/init.d/crond start
关闭服务
service crond stop 或者 /etc/init.d/crond stop
重新加载:
service crond reload 或者 /etc/init.d/crond reload
所支持的命令如:
/etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}
好了,服务我们开启了,那么接下来我们来进行我的任务脚本吧,go ^-^


任务相关的实现我们是通过另外一个命令实现的:crontab(在/etc/下面有几个关于crontab的文件,详细请man crontab)

使用方法如:

usage:	crontab [-u user] file
	crontab [-u user] [ -e | -l | -r ]
		(default operation is replace, per 1003.2)
	-e	(edit user's crontab)
	-l	(list user's crontab)
	-r	(delete user's crontab)
	-i	(prompt before deleting user's crontab)
	-s	(selinux context)

其定时格式如下:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
^_^,很直观,很明了


根据上面我们进行实例吧。

1,查看当前登录用户的任务计划

crontab -l
2,编辑或添加当前用户的任务计划(添加或者编辑完成后使用vi命令保存退出即可)
crontab -e
3,具体任务go,go,go
需求一,在每天凌晨1点执行 命令:netstat -atlnup > /root/network.log
00 1 * * * netstat -atlnup>/root/network.log
需求二,在每分钟执行命令:netstat -atlnup > /root/network.log
*/1 * * * * netstat -atlnup>/root/network.log

需求三,在每小时执行命令:netstat -atlnup > /root/network.log

00 */1 * * * netstat -atlnup>/root/network.log
后记:这对于管理员来说执行一些日常的日志已经很有用了,特别是对于日志备份,系统备份方面。

       当然这仅仅是简单的运用,其还有一些高级的用法:    

       更多移步如下:     http://en.wikipedia.org/wiki/Cron

                                    http://linuxconfig.org/linux-cron-guide

linux mail 发送普通附件及数据库备份脚本

  |   0 评论   |   2,807 浏览

由于自己的需求仅仅是进行数据库备份所以采用uuencode方式发送mysql数据库备份

如果是debian或者ubuntu系统如果不存在uuencode命令,则采用如下命令进行安装

sudo apt-get  install sharutils
如果是centos系统则采用:

yum install sharutils
进行安装。

然后我们就可以编写我们数据库备份脚本并发送到自己的邮箱

#!/bin/bash
#备份blog数据库
mysqldump -u root -pmysqlpassword mydb > mydb.sql
uuencode -m mydb.sql mydb.sql|mail -s "blog数据库备份" abcd@qq.com
rm mydb.sql -rf

脚本保存为backup.sh

创建定时执行计划

[root@c2y2]crontab -e
1 2 */1 */1 */1 /bin/bash /root/backup.sh
表示每天的凌晨2点1分执行数据库备份脚本。


这样我们就可以将备份脚本发送到我们的邮箱里边,我们收到邮箱了如何解码出我们自己的文件呢?

我们收到邮件后,将邮件的内容全部拷贝并粘贴到一个新创建的文本文件中,然后将文件的后缀名改为uue(如我将文件保存为:mydb.uue)

这还么有得到我们想要的文件呢,我们还需要进一步操作才能得到我们的文件

如果我们在linux中可以如下命令得到我们的文件

uudecode -o mydb.sql mydb.uue
如果我们在windows系统中,我们可以直接采用压缩文件解压得到我们的文件


后记:

   1, 在创建定时执行计划时:如果我们是root用户,并且创建定时脚本后不能正常执行计划,那么创建计划的时候我们不需要跟我们的用户名,如果跟了反而不能正常执行

    比如我创建的定时执行脚本,就没有跟用户

  [root@c2y2]crontab -e
  1 2 */1 */1 */1 /bin/bash /root/backup.sh
   2,采用uudecode发送文本附件时,特别是含有中文的我们有可能解压出来是乱码,我们可以采用如下方式解决:
     uuencode -m file.txt file.txt|mail -s 'test' abcd@qq.com

    也即是uuencode需要跟一个-m参数,统一才采用base64编码,这样我们解压出来后就不会存在乱码现象了。

   3,这种方式发送附件不推荐大文件采用这种方式,编码解码太麻烦了,我们采用更为强大的mutt发送邮件附件,另外mail 有-a参数提示可以直接跟附件,但是我至今没有成功。出现了如下错误

    待解决:

    clsmtp-server: 551 User not local; please try <forward-path>
    "/root/dead.letter" 15/318