Linux定时任务

全过程,每分钟都会在test.txt里输入当前时间):

1.     以普通用户登录linux系统
2.     $crontab –e
说明:系统默认的编辑器是VIM,如果不是请加上以下shell:
$EDITOR=vi
$export EDITOR 
3.     输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM 
4.     $su root 
5.     $cd /etc/init.d 
6.     ./crond restart 

下面看看看几个具体的例子:

0   */2  *    *   *   /sbin/service httpd restart   意思是每两个小时重启一次apache 
50  7    *    *   *   /sbin/service sshd start   意思是每天7:50开启ssh服务
50  22   *    *   *   /sbin/service sshd stop   意思是每天22:50关闭ssh服务
0   0    1,15  *   *   fsck /home   每月1号和15号检查/home 磁盘
1   *    *    *   *   /home/bruce/backup   每小时的第一分执行 /home/bruce/backup这个文件
00  03   *    *  1-5  find /home "*.xxx" -mtime +4 -exec rm {} \;   每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30  6    */10  *   *   ls   意思是每月的1、11、21、31日是的6:30执行一次ls命令

 

在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。

以某一频率执行任务

linux缺省会启动crond进程,crond进程不需要用户启动、关闭。
crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。
cron的调度文件有以下几个:

1.   crontab 

2.   cron.d 

3.   cron.daily 

4.   cron.hourly 

5.   cron.monthly 

6.   cron.weekly 

如果用的任务不是以hourly monthly weekly方式执行,则可以将相应的crontab写入到crontab 或cron.d目录中。

示例:
每隔一分钟执行一次脚本 /opt/bin/test-cron.sh 
可以在cron.d新建脚本 echo-date.sh 
内容为

*/1  *  *  *  *  root /opt/bin/test-cron.sh

 

在指定的时间运行任务

也可以通过at命令来控制在指定的时间运行任务

如:

at -f test-cron.sh -v 10:25 
其中-f 指定脚本文件, -v 指定运行时间

quote:ea946d690b="lophyxp"]首先用
contab -l >contabs.tmp
导出contab的配置。
然后编辑contabs.tmp文件。以一下格式添加一行:
分钟 小时 天 月 星期 命令
比如
10 3 * * 0,6 hello
就是每周六、周日的3点10分执行hello程序。
15 4 * * 4-6 hello
就是从周四到周六的4点15点执行hello程序。
然后用
contab contabs.tmp
命令导入新的配置。
一般不建议直接修改/etc/下的相关配置文件。

启动cron进程的方法:/etc/init.d/crond start
开机就启动cron进程的设置命令:chkconfig --add crond

方法二:

把cron加入到启动脚本中:

# rc-update add vixie-cron default

crontab -l #查看你的任务

crontab-e#编辑你的任务

crontab-r#删除用户的crontab的内容

实例讲解二:

系统cron设定:/etc/crontab
    通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限

0   7  *  *   *    root    mpg123 ~/wakeup.mp3 

分 时 日 月 周

示例:

0   4   *   *   0  root  emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
0   2   1   *   *  root   rm -f /tmp/*                                    #每月1号凌晨2点,清理/tmp下的文件
0   8   6   5   *  root  mail robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐

假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:

*/2  *      *  *  *  root      ...............      #每两分钟就执行........ 
0    6,12,18  *  *  *  root      ...............      #每天6点、12点、18点执行........

每两个小时

0  */2  *  *  *  echo "have a break now." >&gt; /tmp/test.txt

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

0  23-7/2,8  *  *  *  echo "have a good dream:)" &gt;&gt; /tmp/test.txt

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

0  11  4  *  1-3  command line

1月1日早上4点

0  4 1 1 * command line

 

 
linux下定时执行任务的方法 

在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。

 

在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。

cron的配置文件称为“crontab”,是“cron table”的简写。

一、cron在3个地方查找配置文件:
1、/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。
一般一个用户最多只有一个crontab文件。

二、/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。

三、/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

四、权限
crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下: 
1、如果两个文件都不存在,则只有root用户才能使用crontab命令。 
2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。 
3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。 
4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,
以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。

 

五、cron服务
  cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
  /sbin/service crond start    //启动服务
  /sbin/service crond stop     //关闭服务
  /sbin/service crond restart  //重启服务
  /sbin/service crond reload   //重新载入配置
  /sbin/service crond status   //查看服务状态 

在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
    每个域之间使用空格或者制表符分隔。格式如下: 
  minute hour day-of-month month-of-year day-of-week commands 
    合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(代表要执行的脚本)
    除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

几个例子: 
每天早上6点 

0  6  *  *  *  echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时 

0  */2  *  *  *  echo "Have a break now." >> /tmp/test.txt  

晚上11点到早上8点之间每两个小时和早上八点 

0  23-7/2,8  *  *  *  echo "Have a good dream" >> /tmp/test.txt

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

0  11  4  *  1-3  command line

1月1日早上4点 
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/ 

每小时执行/etc/cron.hourly内的脚本

01  *  *  *  *  root run-parts /etc/cron.hourly

每天执行/etc/cron.daily内的脚本

02  4  *  *  *  root run-parts /etc/cron.daily 

每星期执行/etc/cron.weekly内的脚本

22  4  *  *  0  root run-parts /etc/cron.weekly 

每月去执行/etc/cron.monthly内的脚本 

42  4  1  *  *  root run-parts /etc/cron.monthly 

注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。   
每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。 

5,15,25,35,45,55  16,17,18  *  *  *  command

每周一,三,五的下午3:00系统进入维护状态,重新启动系统。

00  15  *  *  1,3,5  shutdown -r +5

每小时的10分,40分执行用户目录下的innd/bbslin这个指令: 

10,40  *  *  *  *  innd/bbslink 

每小时的1分执行用户目录下的bin/account这个指令: 

1  *  *  *  *  bin/account

每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔): 

20  3  *  *  *  (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st) 

每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。 

12,55  3  4-9  1,4  *  /bin/rm -f expire.1st$#@62;$#@62;mm.txt 

at命令实现定时任务
  假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。
    at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。

    at命令执行流程如下

  # at 2:05 tomorrow

  at>/home/kyle/do_job

  at> Ctrl+D

  AT Time中的时间表示方法

  -----------------------------------------------------------------------

  时 间 例子 说明

  -----------------------------------------------------------------------

  Minute    at now + 5 minutes   任务在5分钟后运行

  Hour      at now + 1 hour      任务在1小时后运行

  Days      at now + 3 days      任务在3天后运行

  Weeks     at now + 2 weeks     任务在两周后运行

  Fixed     at midnight          任务在午夜运行

  Fixed     at 10:30pm           任务在晚上10点30分

  注意:linux默认为不启动,而ubuntu默认为启动的。检查是否启动,用service atd检查语法,用service atd status检查atd的状态,用service atd start启动atd服务。

  查看at执行的具体内容:一般位于/var/spool/at目录下面, 用vi打开,在最后一部分就是你的执行程序



参数详解
-V : 印出版本编号 
-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个 
-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者 
-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入 
网络应用


-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l) 
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d) 
-v : 列出所有已经完成但尚未删除的指定 

删除任务
atrm 2


三天后的下午 5 点锺执行 /bin/ls : 
at 5pm 3 days /bin/ls 

三个星期后的下午 5 点锺执行 /bin/ls : 
at 5pm 2 weeks /bin/ls 

明天的 17:20 执行 /bin/date : 
at 17:20 tomorrow /bin/date 

1999 年的最后一天的最后一分钟印出 the end of world ! 
at 23:59 12/31/1999 echo the end of world !

 

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start //启动服务

  /sbin/service crond stop //关闭服务

  /sbin/service crond restart //重启服务

  /sbin/service crond reload //重新载入配置

 

 

  你也可以将这个服务在系统启动的时候自动启动:

 

  在/etc/rc.d/rc.local这个脚本的末尾加上:

  /sbin/service crond start

 

  现在Cron这个服务已经在进程里面了,我们就可以用这个服务了

 

-------------------------------------

 

 

以Linux下定时备份mysql为例说明下

写一个简单的mysql备份shell脚本

vi

#!/bin/sh
da=`date +%Y%m%d%H%M%S`
mysqldump -u root -pdongjj --all-database>/root/mysqlbakup/$da

保存为 mysqlbak.sh

然后crontab-e

 0 3 * * * /root/mysqlbak.sh 

保存退出

 

相关命令----------------

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 表示星期天)
   除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

 

 

每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这 个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

查看crontab 执行的日志,可以在/var/log/cron* 查看,或者 0 3 * * * /root/mysqlbak.sh >/var/log/mysqlbak.log 2>&1 把日志定向出来查看。

posted @ 2018-06-04 10:24  尘尘test  阅读(281)  评论(0编辑  收藏  举报