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@yang1data]#crontab--help#<==注:crontab–l–e都是直接操作/var/spool/cron/当前用户名文件

usage:crontab[-uuser]file指定某用户crontab–uyang2–e,编辑yang2家目录下的crontab

crontab[-uuser][-e|-l|-r]

(defaultoperationisreplace,per1003.2)

-e(edituser'scrontab)编辑当前用户的定时任务

-l(listuser'scrontab)查看当前用户的定时任务

-r(deleteuser'scrontab)删除定时任务

-i(promptbeforedeletinguser'scrontab)删除crontab文件内容,删前会有提示

-s(selinuxcontext)

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)

所用符号表示意思

*星号每的意思

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

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

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

1)举例:

3012-16/2***cmd

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

*23-7/1**25pxd

注:这是一个错误的命令

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

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

*/1****echoyangrong>>/var/log/yy>/dev/null2>&1

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

2/dev/null2>&1解释

0是标准输入使用<<<

1是标准输出使用>>>

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

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

3)关于重定向的作用

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

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

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

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

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

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


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

相关文章

Centos下搭建性能监控Spotlight
CentOS 6.3下Strongswan搭建IPSec VPN
在CentOS6.5上安装Skype与QQ
阿里云基于centos6.5主机VPN配置
CentOS 6.3下配置multipah
CentOS安装、配置APR和tomcat-native