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这个日志文件中,可以从这个文件查看命令执行的状态。
4、Crontab命令的书写格式
*****/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。
@H_295_502@注:>>与>/dev/null2>&1不可同时存在,不然无法执行
参考:https://my.oschina.net/surjur/blog/374415 http://www.centoscn.com/CentOS/help/2014/0820/3524.html