阅读:2733回复:0
Linux计划任务-crontab计划任务详解
目录
[*] 1 cron简介 [*] 2 cron命令 [*] 3 Linux Crontab 格式 [*] 4 cron实例 [*] 4.1 1. 特定时间执行 [*] 4.2 2. 安排多个实例(比如一天执行两次) [*] 4.3 3. 让任务只在特定时间执行(比如仅当工作日时执行) [*] 4.4 4. 如何查看cron定时任务 [*] 4.5 5. 如何编辑cron定时任务 [*] 4.6 6. 安排每分钟都执行定时任务 [*] 4.7 7. 安排后台每十分钟执行定时任务 [*] 4.8 8. 每一年的第一分钟执行定时任务(@yearly) [*] 4.9 9. 每月执行定时任务(@mothly) [*] 4.10 10. 每天执行定时任务(@daily) [*] 4.11 11. 每次重启时执行定时任务(@reboot) [*] 4.12 12. 如何用mail关键字禁止/重定向cron的邮件 [*] 4.13 13. 如何系秒每执行一个定时任务 [*] 4.14 14. cron中的PATH变量 [*] 4.15 15. 从cron文件中定义cron任务 cron简介 Cron 是UNIX, SOLARIS,LINUX下的一个十分有用的工具。通过Cron脚本能使计划任务定期地在系统后台自动运行。 cron命令 [*] crontab -e 编辑该用户的crontab,当指定crontab不存在时新建。 [*] crontab -l 列出该用户的crontab。 [*] crontab -r 删除该用户的crontab。 [*] crontab -u 指定要设定crontab的用户名称。 Linux Crontab 格式 表格: Crontab 字段与允许的值 (Linux Crontab) 字段 描述 允许的值 分钟 一小时的第几分 0-59 小时 一天的第几小时 0-23 日期 一个月的的第几天 1-31 月份 一年的第几个月 1-12 周几 一周的第几天 0-6 命令 命令 可以被执行的任何命令 cron实例 1. 特定时间执行 cron的基本用法是在特定的时间执行一项任务,如下是6月10上午8:30执行Full backup shell script。 要注意的是时间字段采用的是24小时制,如果是下午8点,则改写为20点。 30 08 10 06 * /home/ramesh/full-backup [*] 30 – 第30分钟。 [*] 08 – 早上8点。 [*] 10 – 10号。 [*] 06 – 第6个月 (6月)。 [*] * – 一周的任何一天。 2. 安排多个实例(比如一天执行两次) 下面的增量备份脚本每天执行两次,每天于11:00,16:00执行。 逗号两侧的时间都会执行。 00 11,16 * * * /home/ramesh/bin/incremental-backup [*] 00 – 第0分钟 (每小时开时)。 [*] 11,16 – 早上11点与下午4点。 [*] * – 每天。 [*] * – 每个月。 [*] * – 一周的任何一天。 3. 让任务只在特定时间执行(比如仅当工作日时执行) 下面这个例子是每天9:00-16:00检查数据库状态(包括周六): 00 09-18 * * * /home/ramesh/bin/check-db-status [*] 00 – 第0分钟 (每小时开时)。 [*] 09-18 – 9点, 10点,11点, 12点, 下午1点, 下午2点, 下午3点, 下午4点, 下午5点, 下午6点。 [*] * – 每天。 [*] * – 每个月。 [*] * – 一周的任何一天。 如果只想工作日执行此操作: 00 09-18 * * 1-5 /home/ramesh/bin/check-db-status [*] 00 – 第0分钟 (每小时开时)。 [*] 09-18 – 9点, 10点,11点, 12点, 下午1点, 下午2点, 下午3点, 下午4点, 下午5点, 下午6点。 [*] * – 每天。 [*] * – 每个月。 [*] 1-5 -周一, 周二, 周三, 周四和周五 (工作日)。 4. 如何查看cron定时任务 查看当前用户定时任务: ramesh@dev-db$ crontab -l 查看ROOT用户定时任务,用root登入su-root,再执行crontab -l: root@dev-db# crontab -l no crontab for root 查看其它用户定时任务: root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status 5. 如何编辑cron定时任务 ramesh@dev-db$ crontab -e 6. 安排每分钟都执行定时任务 理论情况下,没有每分钟都要执行的shell,但下面这个例子,让我们更好的了解crontab。 * * * * * 命令 *代表着所有可能取到的值,除了直接用*外,下面的几种情况也较为常用: [*] 当指定*/5在分钟字段,代表每五分钟。 [*] 当指定0-10/2在分钟字段,代表在前十分钟的每两分钟 上面的例子对于其它四个字段同样试用 7. 安排后台每十分钟执行定时任务 */10 * * * * /home/ramesh/check-disk-space 有一些特殊的例子,可以用关键字替代上述五个字段–reboot, midnight, yearly, hourly 表格: Cron 关键字与其意义 关键字 等效于 @yearly 0 0 1 1 * @daily 0 0 * * * @hourly 0 * * * * @reboot 重启时运行 8. 每一年的第一分钟执行定时任务(@yearly) 下面的例子将在每一年的1月1日0:00执行: @yearly /home/ramesh/red-hat/bin/annual-maintenance 9. 每月执行定时任务(@mothly) 下面的例子将在每月1日0:00执行: @monthly /home/ramesh/suse/bin/tape-backup 10. 每天执行定时任务(@daily) 下面的例子将在每天0:00执行: @daily /home/ramesh/arch-linux/bin/cleanup-logs "day started" 11. 每次重启时执行定时任务(@reboot) @reboot CMD 12. 如何用mail关键字禁止/重定向cron的邮件 默认情况下,crontab将向布置定时任务的管理员发送邮件,如果想重定向此用户,添加并更新MAIL。 ramesh@dev-db$ crontab -l MAIL="ramesh" @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space 如果不想任何人接收,则直接将MAIL置空。 13. 如何系秒每执行一个定时任务 无法安排每秒执行,因为最小处理单元是分钟,另一方面,没有什么理由让我们每秒都执行一任务。 14. cron中的PATH变量 上面的例子都是用绝对的路径,如果你想用相对的路径,设置环境变量可以在crontab增加: ramesh@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh @yearly annual-maintenance */10 * * * * check-disk-space 15. 从cron文件中定义cron任务 除了直接编辑外,你也可以先在一个文件中编辑好任务,再导入: ramesh@dev-db$ crontab -l no crontab for ramesh $ cat cron-file.txt @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space ramesh@dev-db$ crontab cron-file.txt ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space 应用时要注意,此操作会删除原有的cron任务。 来源:网络(未验证) |
|