最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[基础] crontab定时任务

[复制链接]
跳转到指定楼层
楼主
发表于 2018-8-24 15:45:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 168主编 于 2018-8-24 15:51 编辑

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。
crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常是/etc/crontab,而这个文件只能由系统管理员来修改。
cronie:主程序包,提供crond守护进程及相关辅助工具。
[AppleScript] 纯文本查看 复制代码
# rpm -ql cronie
/etc/cron.d
/etc/cron.d/0hourly
/etc/cron.deny           #权限控制,黑名单
/etc/pam.d/crond
/etc/sysconfig/crond
/usr/bin/crontab
/usr/lib/systemd/system/crond.service
/usr/sbin/crond
/var/spool/cron 


crontabs:系统自带的一些计划任务。
[AppleScript] 纯文本查看 复制代码
# rpm -ql crontabs
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
/etc/crontab
/etc/sysconfig/run-parts
/usr/bin/run-parts

cronie-anacron:cronie的补充程序,用于监控cronie任务的执行状况。
[AppleScript] 纯文本查看 复制代码
# rpm -ql cronie-anacron
/etc/anacrontab
/etc/cron.hourly/0anacron
/usr/sbin/anacron
/var/spool/anacron
/var/spool/anacron/cron.daily
/var/spool/anacron/cron.monthly
/var/spool/anacron/cron.weekly

对于24小时开机运行的服务器可能用不到的,但是对非24小时开机,又想定时运行任务的机器还是十分有用的。
anacrontab负责执行 /etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly 中的系统任务。
当执行任务时,更新/var/spool/anacron/文件的时间戳。
anacron的配置与cron类似,也是要首先配置一个叫anacrontab的文件,其文件格式说明一般在manual里有man anacrontab
[AppleScript] 纯文本查看 复制代码
# vim /etc/anacrontab  

@reboot    :    Run once after reboot.
@yearly    :    Run once a year, ie.  "0 0 1 1 *".
@annually  :    Run once a year, ie.  "0 0 1 1 *".
@monthly   :    Run once a month, ie. "0 0 1 * *".
@weekly    :    Run once a week, ie.  "0 0 * * 0".
@daily     :    Run once a day, ie.   "0 0 * * *".
@hourly    :    Run once an hour, ie. "0 * * * *".

anacron的工作原理参考这里:http://blog.csdn.net/deerlux/article/details/51090531

crontab在 /etc 目录下面存在 cron.d、cron.daily、cron.weekly、cron.monthly、cron.hourly 五个目录和 crontab、cron.deny 二个文件。
[AppleScript] 纯文本查看 复制代码
cron.daily是每天执行一次的job
cron.weekly是每个星期执行一次的job
cron.monthly是每月执行一次的job
cron.hourly是每个小时执行一次的job

cron.d是系统自动定期需要执行的任务,如果不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面。如果是按小时,按天,按星期,按月的来执行的话,则可以放到前面相应的目录下面去。/etc/cron.hourly/ 的执行任务定义在 /etc/cron.d/0hourly 文件中。
在/var/spool下面存在着两个目录cron,anacron。
/var/spool/cron 目录下面是每个用户自己通过 crontab -e 增加的crontab的内容。/var/spool/anacron 目录下面是记录的是cron.daily,cron.monthly,cron.weekly上一次执行的时间。
crond服务每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d 下面的所有内容,以实现任务的执行。

crontab的权限控制
/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。
这两个控制文件的格式都是每行一个用户。两个文件都不允许有空格。
如果控制文件被修改了,cron守护进程 crond 不必重启。控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
/etc/cron.allow 的优先级高于 /etc/cron.deny。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在cron.deny 中列出的用户都被禁止使用 cron。


crontab命令
[AppleScript] 纯文本查看 复制代码
crontab [-u user] [-l | -r | -e] [-i]

-l:列出当前用户的计划任务。
-e:编辑当前用户的计划任务。
-r:删除当前用户的所有计划任务。即删除/var/spool/cron/USERNAME文件。
-u:管理指定用户的计划任务,仅root有权限。
-i:在使用-r选项删除所有任务时提示用户确认。

crontab的语法
crontab分为两类,系统crontab 和 用户crontab。
1、系统cron任务
[AppleScript] 纯文本查看 复制代码
系统的crontab存放在 /etc/crontab

# vim /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

a、每一行定义一个周期性任务,共7个字段。
b、此处的环境变量不同于用户登录后获得的环境,因此建议命令使用绝对路径。
c、执行结果会发送邮件给mailto指定的用户。


2、用户cron任务
[AppleScript] 纯文本查看 复制代码
用户的crontab文件存放在 /var/spool/cron/USERNAME[/font][/color]
[/color][/font]
# crontab -e -u USERNAME

a、每一行定义一个周期性任务,共6个字段。
b、此处的环境变量不同于用户登录后获得的环境,因此建议命令使用绝对路径。
c、执行结果会发送邮件给当前用户。
星号(*)匹配所有有效的值。
短横线(-)表示范围连续取值。
逗号(,)表示离散取值。
正斜线(/)指定间隔频率。例如,0-59/2 在分钟字段表示每两分钟。
  
指定的时间点不能被步长整除时,其意义将不存在。例如 */7 * * * *

注意:%在crontab中被认为是newline,使用时需要用 \ 转义。比如crontab文件中,如果有 "date +%Y%m%d",必须替换为:"date +\%Y\%m\%d"。


crontab的最小时间单位为”分钟“,想完成”秒“级任务,得需要借助于其它方式。
先定义为每分钟任务,再利用脚本实现在每分钟之内,循环执行多次。
[AppleScript] 纯文本查看 复制代码
sleep命令[/font]delay for a specified amount of time.
s: 秒,默认单位
m: 分
h: 小时
d: 天

usleep命令
sleep some number of microseconds.The default is 1.
# usleep 1000000 休眠1秒

示例
[AppleScript] 纯文本查看 复制代码
*/5 * * * *         每5分钟执行一次
3 * * * *           每小时的第3分钟执行一次
3 4 * * 5           每周5的4点3分执行一次
5 6 7 * *           每月的7号的6点5分执行一次
7 8 9 10 *          每年的10月9号8点7分执行一次
9 8 * * 3,7         每周3和周日的8点9分
0 8,20 * * 3,7      每周3和周日的8点和20点执行一次
0 9-18 * * 1-5      周一到周五的9-18点,即工作时间内的每小时
0 7 25 12 *         每年的12月25号7点执行一次

查看所有用户的crontab
# for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done  
查看cron的日志
# tail -50f /var/log/cron

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-16 19:00

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表