Crontab:在unix/linux系统上定时(循环)执行某个任务

  Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序

  使用cron服务,用 service crond status 查看 cron服务状态,如果没有启动则 service crond start启动它,

  cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务:

  crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

  crontab -l //列出某个用户cron服务的详细内容

  crontab -r //删除没个用户的cron服务

  crontab -e //编辑某个用户的cron服务

  比如说root查看自己的cron设置:crontab -u root -l

  再例如,root想删除fred的cron设置:crontab -u fred -r

  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

  进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

  编辑/etc/crontab文件,在末尾加上一行: 30 5 * * * root init 6 这样就将系统配置为了每天早上5点30自动重新启动。

  需要将crond设置为系统启动后自动启动的服务,可以在/etc/rc.d/rc.local 中,在末尾加上

  service crond start

  如果还需要在系统启动十加载其他服务,可以继续加上其他服务的启动命令。

  比如: service mysqld start

  基本用法:

  1. crontab -l

  列出当前的crontab任务

  2. crontab -d

  删除当前的crontab任务

  3. crontab -e (solaris5.8上面是 crontab -r)

  编辑一个crontab任务,ctrl_D结束

  4. crontab filename

  以filename做为crontab的任务列表文件并载入

  crontab file的格式:

  crontab 文件中的行由 6 个字段组成,不同字段间用空格或 tab 键分隔。前 5 个字段指定命令要运行的时间

  分钟 (0-59)

  小时 (0-23)

  日期 (1-31)

  月份 (1-12)

  星期几(0-6,其中 0 代表星期日)

  第 6 个字段是一个要在适当时间执行的字符串

  例子:

  #MIN HOUR DAY MONTH DAYOFWEEK COMMAND

  #每天早上6点10分

  10 6 * * * date

  #每两个小时

  0 */2 * * * date (solaris 5.8似乎不支持此种写法)

  #晚上11点到早上8点之间每两个小时,早上8点

  0 23-7/2,8 * * * date

  #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

  0 11 4 * mon-wed date

  #1月份日早上4点

  0 4 1 jan * date

  补充:在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)

  (1)先建一个文件crond.txt如下, 每天早上5点36分重新启动

  36 5 * * * reboot

  (2)上传到/opt目录

  (3)运行命令

  crontab /opt/crond.txt

  crontab -l

  让配置文件生效:如果让配置文件生效,还得重新启动cron,切记,既然每个用户下的cron配置文件修改后。也要重新启动cron服务器。

  在Fedora 和Redhat中,我们应该用;

  [root@localhost ~]# /etc/init.d/crond restart

  如果让crond 在开机时运行,应该改变其运行级别;

  [root@localhost ~]# chkconfig –levels 35 crond on

  service crond status 查看 cron服务状态,如果没有启动则 service crond start启动它, cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务

  Crontab文件的每一行由六个域(minutes、hours、day of month、month、day of week、 command)组 成,域之间用空格或Tab分开,其中:

  minutes: 分钟域,值的范围是0到59

  hours: 小时域,值的范围是0到23

  day of month: 日期,值的范围是1到31

  month: 月份,值的范围是1到12

  day of week: 星期,值的范围是0到6,星期日值为0

  command: 所要运行的命令

  如果一个域是*,表明命令可以在该域所有可能的取值范围内执行。

  如果一个域是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执行(包括两个数字 本身)。

  如果一个域是由逗号隔开的一系列值组成的,表明命令可以在这些值组成的范围内执行。

  如果日期域和星期域都有值,则这两个域都有效。

  编写一个文件,用以启动自动备份进程。

  cd /opt

  touch reboot.txt

  在reboot.txt中添加一下内容:

  0 4 * * * reboot

  crontab /opt/reboot.txt

  用crontab -e编辑定时操作,例如加入下行命令:

  用crontab -l命令来查看

  注意:需要启动服务(添加在rc.local中)

  重启crond任务

  /etc/init.d/cron restart (ubuntu下)

  第一种 在Fedora或Redhat 等以RPM包管理的系统中;

  [root@localhost ~]# /etc/init.d/crond start

  [root@localhost ~]# /etc/init.d/crond stop

  [root@localhost ~]# /etc/init.d/crond restart

  /etc/rc.d/init.d/crond restart

  命令简介

  crontab-操作每个用户的守护程序和该执行的时间表。

  部分参数说明

  crontab file [-u user]-用指定的文件替代目前的crontab。

  crontab-[-u user]-用标准输入替代目前的crontab.

  crontab-1[user]-列出用户目前的crontab.

  crontab-e[user]-编辑用户目前的crontab.

  crontab-d[user]-删除用户目前的crontab.

  crontab-c dir- 指定crontab的目录。

  crontab文件的格式:M H D m d cmd.

  M: 分钟(0-59)。

  H:小时(0-23)。

  D:天(1-31)。

  m: 月(1-12)。

  d: 一星期内的天(0~6,0为星期天)。

  cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量。

  下面是一个例子文件:

  #MIN HOUR DAY MONTH DAYOFWEEK COMMAND

  #每天早上6点

  106* * * date

  #每两个小时

  0*/2* * * date

  #晚上11点到早上8点之间每两个小时,早上部点

  0 23-7/2,8* * * date

  #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

  0 11 4* mon-wed date

  #1月份日早上4点

  0 4 1 jan* date

Linux命令tar压缩排除指定目录的方法

例如我要压缩 /cat/backup 这个文件夹 (绝对路径),但是不将里面的图片文件夹img也压缩了

 

.可以用tar命令的–exclude 排除掉.方法

tar -zcvf backup.tar.gz –exclude=/cat/backup/img  /cat/backup

排除多个目录

tar -zcvf backup.tar.gz –exclude=/cat/backup/img –exclude=/cat/backup/a –exclude=/cat/backup/b /cat/backup

 

Linux tar 常用压缩打包命令

tar压缩打包命令对VPS文件备份很有用。而解压可以用 unzip 命令。

在网上找来tar相关的资料,看起来很罗嗦,虽然面面俱到了,但平常用不到那么多的属性。

下面是比较简单的范例讲解,将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar :
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩

注意,生成压缩包的目录跟被打包的目录之间有一个空格。

附:tar完整参数
[root@linux ~]# tar –cxtzjvfpPN
其中,
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
【特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。】
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
【例如使用 tar -zcvfP tfile sfile 就是错误的写法,要写成 
tar -zcvPf tfile sfile 才对喔!】
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!

 

tar压缩命令&范例

tar [-cxtzjvfpPN] 文件与目录 ….
参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
–exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:

范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]#
tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc<==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc<==打包后,以 bzip2 压缩
# 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
# 上述指令在执行的时候,会显示一个警告讯息:
# 『tar: Removing leading `/" from member names』那是关於绝对路径的特殊设定。

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
# 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
# 就得要加上 z 这个参数了!这很重要的!

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
# 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!

范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home

范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar –exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf – /etc | tar -xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在於输出档变成 – 而输入档也变成 – ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!
# 这部分我们会在 Bash shell 时,再次提到这个指令跟大家再解释啰!

 

压缩命令:
*.Z compress 程式壓縮的檔案;
*.bz2 bzip2 程式壓縮的檔案;
*.gz gzip 程式壓縮的檔案;
*.tar tar 程式打包的資料,並沒有壓縮過;
*.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮
compress filename 压缩文件 加[-d]解压 uncompress
gzip filename 压缩 加[-d]解压 zcat 123.gz 查看压缩文件内容
bzip2 -z filename 压缩 加[-d]解压 bzcat filename.bz2 查看压缩文件内容
tar -cvf /home/123.tar /etc 打包,不压缩
tar -xvf 123.tar 解开包
tar -zxvf /home/123.tar.gz 以gzip解压
tar -jxvf /home/123.tar.bz2 以bzip2解压
tar -ztvf /tmp/etc.tar.gz 查看tar内容
cpio -covB > [file|device] 份份
cpio -icduv < [file|device] 还原

对lftp的一个简述

lftp是一个优秀的文件传输程序,它支持ftp/http等协议。登录后,可以使用shell-like命令,如cd,ls等。ltfp允许镜像下载和上传,同时lftp已经被包含在了openssh中。lftp读取配置文件的顺序是:
1、/etc/lftp.conf
2、~/.lftprc
3、~/.lftp/rc
使用debug命令可以进行调试,使用set可以设置环境变量。
set -a 用于显示所有的变量
set -d 列出详细的值

基本语法格式

1、lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]
2、lftp -f script_file
3、lftp -c commands
4、lftp –version
5、lftp –help

lftp的help内容
$ lftp –help
Usage: lftp [OPTS] <site>
`lftp' is the first command executed by lftp after rc files
-f <file>           execute commands from the file and exit
-c <cmd>            execute the commands and exit
–help              print this help and exit
–version           print lftp version and exit
Other options are the same as in `open' command
-e <cmd>            execute the command just after selecting
-u <user>[,<pass>]  use the user/password for authentication
-p <port>           use the port for connection
<site>              host name, URL or bookmark name
同时在使用lftp时,可以使用help查看帮助以及查看各个命令。如:help ls。

lftp的简单使用
$ lftp http://www.caopeng.net
cd ok, cwd=/                                     
lftp www.caopeng.net:/> ls
drwxr-xr-x  –  intl/zh-CN/options  
-rw-r–r–  –  intl/zh-CN/images/logo_cn.gif
drwxr-xr-x  –  intl/zh-CN/ads
-rw-r–r–  –  intl/zh-CN/about.html
-rw-r–r–  –  intl/zh-CN/privacy.html
-rw-r–r–  –  intl/zh-CN_cn/images/cn_icp.gif
这里对google中国进行了lftp,没有涉及lftp的密码登录。
或者使用:
$ lftp
lftp :~> open http://www.caopeng.net
cd ok, cwd=/                              
lftp www.caopeng.net:/>

lftp www.caopeng.net:/> mirror
下载整个站点的全部文件。或者可以下载一个被指定的目录。如果使用mirror -R,则是进行上传文件。

lftp还有书签功能,可以保存现在正在浏览的内容。
lftp www.caopeng.net:/> bookmark add 123
$ lftp 123
添加www.caopeng.net为书签“123”,下次使用时,就可以使用“123”代替这个站点的名字了

关于中文乱码
通过set进行设置,可以写入配置文件中。通过设置ftp:charset和file:charset一般可以解决中文的乱码问题(主要是字符集的不同一)。
 

实现你的VPS上的数据自动备份

VPS备份,方法有很多,在这里我只说最简单的也是最实用的一个。用脚本备份VPS的数据,然后用FTP传到另外一个服务器。全程都是自动化的。你只需要配置好两段脚本然后定时任务自动执行就可以了。

首先是备份你的网站数据。

写脚本之前,请先在你的VPS上安装lftp,以方便用FTP传到另外的服务器。安装方法很简单。
我用的是CentOS。SSH连接到VPS,然后命令行执行
yum -y install lftp
如果你用的是Ubuntu,可以直接执行
sudo apt-get install lftp

好了,下面就是在你的VPS上创建一个脚本文件。命令行执行
vi backup.sh
在打开的编辑器里输入
#!/bin/bash
tar zPcf /home/wwwroot/backup/backup_$(date +%Y%m%d).tar.gz /home/wwwroot/xxx.com
/usr/bin/lftp -u ftpuser,passwd ftp.com/backup -e "put /home/wwwroot/backup/backup_$(date +%Y%m%d).tar.gz;exit"
rm -r /home/wwwroot/backup/backup_$(date +%Y%m%d).tar.gz

其中标红的是你的VPS上网站的根目录,我放在了home下的wwwroot里。然后标黄的就是要备份的网站数据的根目录。比如我的何必呢,就放在了/home/wwwroot/blog.caopeng.com 这个文件夹下。我在/home/wwwroot/下创建了backup文件夹以临时存放我的备份数据。所以第一句命令的意思就是打包/home/wwwroot/blog.caopeng.com这个文件夹并命名为backup_当天日期.tar.gz然后把打包的数据放到/home/wwwroot/backup/里。

显然第二句命令行就是要利用我们刚刚安装的ftp软件lftp将打包好的文件传到另外一台服务器以用作备份。-u后面标蓝的是你另外一台服务器的FTP用户名和密码,把ftpuser,passwd替换成你自己的FTP用户名密码就可以了。后面标绿的是你另外一台FTP的IP和要存放的路径。

第三句命令的意思就是在传到FTP之后删除你刚刚存放在/home/wwwroot/backup/里的打包文件,以释放少VPS空间。当然如果你的VPS空间足够大的话,你也可以一直保存在/home/wwwroot/backup/里只需要定时清除一下就可以了。

好了,在创建的backup.sh文件里输入以上脚本后,按esc键然后输入:wq退出编辑并保存文件。这样一个备份脚本就写好了,你可以修改一下你杠杠创建的脚本的权限。然后执行一下看看能否执行成功。
chmod +x backup.sh
sh backup.sh
执行备份脚本的时间会视你网站文件的多少和大小而不定,如果你看着命令死在那了,等着就可以了。
最后如果命令执行完毕后,你可以根据报的错去修改你的命令行,或者去你另外一台FTP上查看是否有备份好的文件。

备份完网站文件,我们再来备份下数据库。命令行执行
vi dbbackup.sh
在打开的编辑器里输入
#!/bin/bash
/usr/local/mysql/bin/mysqldump -uuser -ppasswd databasename > /home/wwwroot/backup/date_$(date '+%Y%m%d').sql
/usr/bin/lftp -u ftpuser,passwd ftp.com/backup -e "put /home/wwwroot/backup/date_$(date +%Y%m%d).sql;exit"
rm -rf /home/wwwroot/backup/date_$(date +%Y%m%d).sql

第一句命令意思是用mysqldump导出名为databasename的数据库到/home/wwwroot/backup/文件夹并命名为date_日期.sql.-u后面的红色是你的Mysql的用户名,-p后面的红色是Mysql密码,databasename是要备份的数据库名字,把这三个替换成你自己的。

第二句和上面备份网站文件的命令一样,用lftp传到另外一台服务器。第三句是删除刚备份的数据库文件。

同样修改权限并执行备份脚本看能否备份成功。
chmod +x dbbackup.sh
sh dbbackup.sh

如果一切检查没有问题了,就创建定时任务自动备份你的数据吧。输入命令
crontab -e
在打开的文件里输入定时任务。

56 23 * * * /root/dbbackup.sh
00 00 * * * /root/backup.sh

然后按esc键然后输入:wq退出编辑并保存文件。

好了,定时任务创建好了,每天23点56分备份执行dbbackup.sh备份数据库,每天0点执行backup.sh备份网站文件。

CAO PENG DOT COM | 看邦主文摘来CAOPENG.NET | 学编程之邦去CAOPENG.ORG | 搜索引擎XML地图1 2 | WMV to DVD | remove drm from wmv | DVD Creator | 虚拟现实