1 cron
以下,是ctontab的格式:
分<>时<>日<>月<>星期<>要运行的命令
其中<>表示空格。
这里有c r o n t a b文件条目的一些例子:
30 21* * * /apps/bin/cleanup.sh
上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h。
45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} /;
上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h。
3 3 * * * cat /dev/null > /opt/apache2/logs/access_log
上面的例子,表示每天晚上3:3分,清除一次apache的access_log
*/10 * * * * /bin/sh /root/query.sh &> /tmp/querylog.log &
上面的例子,表示每过10分钟,执行一次命令query.sh
crontab 常用的命令如下:
crontab -e 编辑crontab
crontab -l 列出crontab的内容
2 rsync
rsync:
1)ssh 模式
在我们的服务器上比较常用,因为很多服务器上已经设置好了 ssh 的 key,所以无需配置 rsync 服务,也无需在此输入密码,特别是在需要从一台机器主动向多台机器同步的情况下。
这种时候,只需要按照 scp 的方式写远程路径,即 HOST:/remote/path。
命令格式如下:
rsync -参数 /源/路径 HOST:/目标/路径 或 rsync -参数 HOST:/源/路径 /目标/路径
有时候我们需要特别指定用某个 ssh 版本(比如有些服务器上装了 openssh 但需要指定用 ssh1),这时候用 -e 参数指定即可
rsync -e ssh -其他参数 源路径 HOST:/目标/路径 或 rsync -e ssh1 -其他参数 源路径 HOST:/目标/路径
2)rsyncd 模式
当有一台中央文件服务器,且有多个客户端需要从该服务器同步文件,且目标端的数量和 IP 不可预知的情况下,可以使用 rsyncd 的模式。而且 rsyncd 的模式在安全性上也有一定优势,不需要目标端的 ssh key,也不知道目标端具体是哪些服务器,从而不会导致因此服务器被攻陷而暴露其它服务器。
并不存在一个 rsyncd 的咚咚,只要在 /etc/rsyncd.conf 文件中作一定设置,然后运行 rsync --daemon 即可。rsyncd.conf 的一个例子:
#----------------- begin --------------
uid = nobody
gid = nobody
max connections = 100
syslog facility = local2 # syslog 的参数
[report]
comment = log-report
path = /log/report/
read only = no # 设置为 no 时允许上传,该配置
list = no # 作为上传服务器的话,出于安全起见,可以关闭目录的 list 权限
uid = report
gid = log
hosts allow = 192.168.12.0/24 10.1.1.1
hosts deny = 192.168.12.99
auth users = rock, roll
secrets file = /etc/rsyncd.secrets
#----------------- end --------------
/etc/rsyncd.secrets 是 rsyncd 的密码文件,格式如下:
uername1:passwd1
uername2:passwd2
更多配置参数可以 man rsyncd.conf
需要上传/下载文件的服务器,在指定远程路径时,需要用 HOST::服务名称/路径 的方式指定路径。如对应上述配置文件,路经可以这样写:
HOST::report/2008/04/23/xxx.log
如下使用:
#!/bin/bash
IMG_ROOT=/tmp/
RSYNC_SERVER=192.168.1.20
RSYNC_MODULE=club_rss
OPT=$1
case $OPT in
get)
# get images from remote server
/usr/bin/rsync -auv $RSYNC_USER@$RSYNC_SERVER::$RSYNC_MODULE $IMG_ROOT --password-file=$RSYNC_PWDFILE
;;
put)
# put images to remote server from local machine
/usr/bin/rsync -auzv --delete $IMG_ROOT $RSYNC_USER@$RSYNC_SERVER::$RSYNC_MODULE --password-file=$RSYNC_PWDFILE
;;
*)
echo "Usage:"
echo " `basename $0` [ get | put ]"
echo ""
;;
esac
3)常用参数
-z 压缩
-v 会输出正在同步哪些文件,命令行执行时有用,一旦确定放进 crontab 自动执行,还是把这个参数去掉吧,
否则每同步一次都会给 root 发个清单(视需求而定吧,可以在同步出问题时作为复查手段)。
-r 同步目录内容
-a archive 模式,会保持文件和目录的 uid gid 访问权限 日期等
-H 保持 hard link
-l 保持符号链接
-L 不保持符号链接,以真实文件取代之
-p -o -g -t -D 分别对应保持源段的 permissions(访问权限) owner group time device
-n (--dry-run dry run)只显示要干什么,而不真正执行,测试命令的时候比较有用。
-u 如果目标端的同名文件更新,则不覆盖
--partial 如果 rsync 被中断,则保持已经传完的部分,再次启动 rsync 时,会断点序传
-C CVS 目录不做同步
--exclude=PATTERN 某些文件不同步,如文件名以 ~ 或 .bak 结尾的备份文件等。多个模式可以使用多个该参数,等号后面是正则表达式。
--include=PATTERN 用于从 exclude 忽略掉的文件中,再加上符合一些更特殊条件的(比如非常重要的文件等)
--from-file=/path/to/file 当 exclude 的文件名不能用模式表示的时候,可以写在文件里
注意:源路径如果是个目录,结尾有 / 和没有 / 是完全不同的!!!有 / 的时候,会把目录中的文件和子目录同步过去,但不会同步该目录;没有 / 的时候,则会连同该目录一起同步。如源路径包含这样一个文件 /data/a/b.txt,目标目录为 /tmp/data/,则
rsync -az HOST:/data/a /tmp/data/ ==] /tmp/data/a/b.txt
rsync -az HOST:/data/a/ /tmp/data/ ==] /tmp/data/b.txt
2 grep
3 regrep
4 awk
5 sed
6 sort
7 cut
8 tr
9 引号
10 控制流