使用crontab+rsync备份你的站点

这是一篇记录站点备份的文章,通常站点需要每隔一周,甚至更短的时间进行备份,然而手工备份再下载下来这实在是麻烦,于是利用crontab和rsync进行站点备份,再利用我本地的树莓派定时拉取备份结果,想想还是挺完美的。

编写备份的shell

站点文件备份很简单,直接将站点打包压缩即可,但是想了想还是不把站点路径定义死,而是使用一个参数将站点路径传递进去,这样就能写一个通用的文件备份

#! /bin/bash
src='';
dest='';
while getopts 's:d:' OPT
do
 case $OPT in
 s) src=$OPTARG;;
 d) dest=$OPTARG;; 
 esac
done

if [ -z $src -o -z $dest ]; then

 echo "Usage: -s [source folder] -d [destination folder]";
 exit 1;
fi

if [ ! -d $src ]; then
 echo "backup directory $src not exists";
 exit 1;
fi

if [ ! -d $dest ]; then
 echo "destination directory $dest not exists";
 exit 1;
fi

cd $src
now=`date +%Y%m%d`
filename=${src#*/}
filename=${filename//\//-};
file=$dest'/'$filename'-'$now'.tar.gz';
tar -czf $file ./*

写完发现,这样写可能有些复杂了。还是写死了的好,多简单。这里备份一下我的git。

假设目录在/home/git下面,我需要被分到/home/backup/git下面,脚本如下。

#! /bin/bash
cd /home;
now=`date +%Y%m%d`;
tar -czf '/home/backup/git/git-'$now'.tar.gz' git

rsync同步文件

假设机器上面已经安装了rsync软件,没有安装的直接用包管理安装即可。

首先需要配置rsync的模块,rsync配置文件在/etc/rsyncd.conf,如果没有需要我们新建一个。配置文件如下

uid = root
gid = root
use chroot = no
max connection = 4
strict modes = yes
port = 873

[backup]
path = /home/backup
comment = back up files
ignore errors
read only = yes
list = no
auth users = huchao
secrets file = /etc/rsync.pass

建立密码文件 /etc/rsync.pass,密码文件的格式是 用户名:密码,比如下面的内容就是一个合法的密码文件格式

huchao:123456

为了安全,我们把权限改成600

chmod 600 /etc/rsync.pass

启动raync,加上daemon参数就可以了。

/usr/bin/rsync --daemon

另外,详细rsync参数配置参见:http://www.cnblogs.com/zhenhui/p/5715840.html

这里摘抄一段

全局参数

在文件中 [module] 之外的所有配置行都是全局参数。当然也可以在全局参数部分定义模块参数,这时该参数的值就是所有模块的默认值。

参数 说明 默认值
address 在独立运行时,用于指定的服务器运行的 IP 地址。由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。 本地所有IP
port 指定 rsync 守护进程监听的端口号。 由 xinetd 运行时将忽略此参数,使用命令行上的–port 选项替代。 873
motd file 指定一个消息文件,当客户连接服务器时该文件的内容显示给客户。
pid file rsync 的守护进程将其 PID 写入指定的文件。
log file 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。
syslog facility 指定 rsync 发送日志消息给 syslog 时的消息级别。 daemon
socket options 指定自定义 TCP 选项。


模块参数

模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

a. 基本模块参数

参数 说明 默认值
path 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的。
comment 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。

b. 模块控制参数

参数 说明 默认值
use chroot 若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件。 true
uid 指定该模块以指定的 UID 传输文件。 nobody
gid 指定该模块以指定的 GID 传输文件。 nobody
max connections 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。 0(没有限制)
lock file 指定支持 max connections 参数的锁文件。 /var/run/rsyncd.lock
list 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。 true
read only 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。 true
write only 指定是否允许客户下载文件。若为 true 则不允许下载;若为 false 并且服务器目录也具有读权限则允许下载。 false
ignore errors 指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。 true
ignore nonreadable 指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。 false
timeout 该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。 0 (未限制)
dont compress 用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:”dont compress = *”。 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

c. 模块文件筛选参数

参数 说明 默认值
exclude 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。
exclude from 指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义。
include 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式 。
include from 指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义。
  • 一个模块只能指定一个exclude 参数、一个include 参数。
  • 结合 include 和 exclude 可以定义复杂的exclude/include 规则 。
  • 这几个参数分别与相应的rsync 客户命令选项等价,唯一不同的是它们作用在服务器端。

d. 模块用户认证参数

参数 说明 默认值
auth users 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中。 (匿名方式)
secrets file 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。
strict modes 指定是否监测口令文件的权限。若为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。 true
  • rsync 认证口令文件的权限一定是 600,否则客户端将不能连接服务器。
  • rsync 认证口令文件中每一行指定一个 用户名:口令 对,格式为:

    username:passwd

  • 一般来说口令最好不要超过8个字符。若您只配置匿名访问的 rsync 服务器,则无需设置上述参数。

e. 模块访问控制参数

参数 说明 默认值
hosts allow 用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。 *
hosts deny 用一个主机列表指定哪些主机客户不允许连接该模块。

客户主机列表定义可以是以下形式:

  • 单个IP地址。例如:192.168.0.1
  • 整个网段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
  • 可解析的单个主机名。例如:centos,centos.bsmart.cn
  • 域内的所有主机。例如:*.bsmart.cn
  • “*”则表示所有。
  • 多个列表项要用空格间隔。

f. 模块日志参数

参数 说明 默认值
transfer logging 使 rsync 服务器将传输操作记录到传输日志文件。 false
log format 指定传输日志文件的字段。 ”%o %h [%a] %m (%u) %f %l”

设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“。

可以使用的日志格式定义符如下所示:
  • %a – 远程IP地址
  • %h – 远程主机名
  • %l – 文件长度字符数
  • %p – 该次 rsync 会话的 PID
  • %o – 操作类型:”send” 或 “recv”
  • %f – 文件名
  • %P – 模块路径
  • %m – 模块名
  • %t – 当前时间
  • %u – 认证的用户名(匿名时是 null)
  • %b – 实际传输的字节数
  • %c – 当发送文件时,记录该文件的校验码

chkconfig给linux添加开机自启动服务,chkconfig命令详解

chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

使用语法

chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

chkconfig 在没有参数运行时,会显示所有的服务在开机启动状态。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指 定了on,off或者reset,那么chkconfig 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。on和off开 关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。

参数用法

--add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
--del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
--level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

(更多…)

linux awk命令分析你的文本或日志,awk命令用法

简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报 表,还有无数其他的功能。

(更多…)

linux命令:cd命令,改变当前的工作目录

原标题 : 每天一个linux命令(2):cd命令

Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的。

所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧。

命令格式

cd [目录名]

命令功能

切换当前目录至dirName

(更多…)

linux命令:ls用法,列出文件及目录

原标题:每天一个linux命令(1):ls命令

ls 命令是linux下最常用的命令。ls命令就是list的缩写缺省下ls用来打印出当前目录的清单,如果ls指定其他目录那么就会显示指定目录里的文 件及文件夹清单。 通过ls 命令不仅可以查看linux文件夹包含的文件而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等。ls 命令在日常的linux操作中用的很多!

ls命令格式

ls [选项] [目录名]

命令功能

列出目标目录中所有的子目录和文件。 (更多…)