Centos中使用cron定时执行任务

cron是linux下的一个定时执行工具,可以在无需人工干预的情况下运行作业。

在VPS上,cron一般用来执行定时备份任务,非常方便。

Centos默认已安装cron,但是并不自动运行,可以用以下的方法来启动和设置自动启动:

 


复制代码 代码如下:

#service crond start #启动服务

#chkconfig crond on   #开机自动启动

可以用crontab -e命令来编辑/var/spool/cron下对应用户的cron文件,也可以直接编辑/etc/crontab。

cron的命令格式如下:

分     小时    日     月      星期     命令

0-59   0-23   1-31   1-12     0-6     command


其中,0表示星期日,一行对应一个命令。

下面举几个例子,基本涵盖了常见的一些情况:


复制代码 代码如下:

  5       *       *           *     *     ls         指定每小时的第5分钟执行一次ls命令

 30     5       *           *     *     ls         指定每天的 5:30 执行ls命令

30     7       8           *     *     ls         指定每月8号的7:30分执行ls命令

30     5       8           6     *     ls         指定每年的6月8日5:30执行ls命令

30     5       8           6     *     ls         指定每年的6月8日5:30执行ls命令

30     6       *           *     0     ls         指定每星期日的6:30执行ls命令

30     3     10,20      *     *     ls         每月10号及20号的3:30执行ls命令

25     8-11 *            *     *     ls         每天8-11点的第25分钟执行ls命令

  */15   *       *          *     *     ls         每15分钟执行一次ls命令

30   6     */10          *     *     ls         每个月中,每隔10天6:30执行一次ls命令

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

#每天4:22以root身份执行/etc/cron.daily目录中的所有可执行文件,run-parts参数表示,执行后面目录中的所有可执行文件。

添加后保存的路径是/var/spool/cron,可以直接用vi查看和修改。


脚本文件:

bakTime=` date +%Y%m%d%H%M%S`
cp /home/test/dump.rdb /home/test/bakRedis/$bakTime.rdb


linux 下执行.sh文件总是提示permission denied

 


如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限) 
chmod 777 *.sh

 or

chmod +x  *.sh

然后运行就OK了


Crontab用法

 

[root@yang1 data]# crontab --help   #<==注:crontab –l –e都是直接操作/var/spool/cron/当前用户名的文件

usage: crontab [-u user] file    #<==指定某用户crontab –u yang2 –e,编辑yang2家目录下的crontab

    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 deletinguser's crontab) #<==删除crontab文件内容,删前会有提示

    -s   (selinux context)

注:crontab –e 编辑定时任务,退出时可以检查语法,直接编辑/var/spool/cron/root不能。如果大批量添加任务,则使用echo追加。

cron执行的每一项工作都会被纪录到/var/log/cron这个日志文件中,可以从这个文件查看命令执行的状态。

 

4Crontab命令的书写格式

 

  *      *     *      *     *    /bin/sh /scripts/yy.sh

  分     时     日     月     周    命令和文件路径

(00-59)  (0-23)   (1-31)   (1-12)    (0-6)         

 

所用符号表示意思

星号每的意思

减号连续一段时间,如:00 17-19 * * * cmd  每天下午17点,18点,19点执行一次命令

逗号多个时间段,如:00 10-11,17-19 * * * cmd 每天的上午10,11点整,下午的17,18,19点整执行一次命令

/n n代表数字,指每隔n时间执行一次,如: */2 * * * * cmd 每隔2分钟执行一次命令

 

1)举例:

30 12-16/2 * ** cmd 

每天的中午12点到下午4点间,每隔2小时执行一次

* 23-7/1 * * 25pxd 

注:这是一个错误的命令

日和周不能同时用,若要以月为间隔,则日或周必有一个有值

其它如:小时上有值,则分钟上也要有值

*/1 * * ** echo yangrong >>/var/log/yy > /dev/null 2>&1

每隔一分钟把yangrong打印到yangrong1文件中,但该命令无法执行,因为>>>/dev/null不可同时使用

 

2/dev/null 2>&1解释

 

0是标准输入    使用<<<

1是标准输出    使用>>>

2是标准错误输出  使用2>2>>

>/dev/null 2>&1  即错误输出与标准输出全部重定向到空,可以写成1>/dev/null 2>/dev/null

 

3)关于重定向的作用

重定向到空可以避免碎片文件占用inode资源

重定向到一个指定log里,可以看任务是否执行

 

4)关于导致磁盘inode满情况分析

定时任务执行成功or失败时,程序会向上层发送mail,由于平时工作中不打开sendmail功能,所以邮件会存储在临时目录/var/spool/clientmqueue,随着执行的任务次数多,文件也会越来越多,直到某一天,添加文件时,提示No space left on device主要问题原因不在于垃圾文件会占很大空间,而在于每个文件会占用inode节点。centos6.4默认不装sendmail,可能不会导致这个问题发生)。

所以crontab规则后需加 /dev/null 2>&1

注:>>  >/dev/null 2>&1不可同时存在,不然无法执行


参考:https://my.oschina.net/surjur/blog/374415
http://www.centoscn.com/CentOS/help/2014/0820/3524.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值