返回介绍

4.2. Linux 计划任务 - 例行性工作排程

发布于 2024-05-13 12:44:10 字数 5920 浏览 0 评论 0 收藏 0

4.2.1. crontab

crontab 能做什么

你肯定希望:
     每一天早上 8:00 钟,让电脑连接上音响,并播放音乐来唤你起床;
     而中午 12:00 希望 Linux 可以发一封信到你的邮件信箱,提醒你可以去吃午餐了;
     另外,在每年你爱人生日的前一天,先发封信提醒你,以免忘记这么重要的一天。
开发者:
     每天凌晨 3 点,定时备份数据库;
     每天晚上 12 点,开始执行自动对账任务。

crontab 简介

crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

选项

-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。

crond 服务

/sbin/service crond start    //启动服务
/sbin/service crond stop     //关闭服务
/sbin/service crond restart  //重启服务
/sbin/service crond reload   //重新载入配置

crontab 基本格式

Table 14: 格式
\*****commond
代表意思分(minute)时(hour)日(day)月(month)周(week) 
范 围(0-59)(0-23)(1-31)(1-12)(0-6) 
  • “ * ”代表所有可能的值,例如 month 字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • “ , ”表示分割,可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
  • “ - ”表示一个段,可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
  • “ /n ”表示每 n 的单位执行一次,可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在 minute 字段,表示每十分钟执行一次。
设置时,命令后面加上 >/dev/null 2>&1  ,标准错误重定向到标准输出

知识扩展

Linux 下的任务调度分为两类:系统任务调度和用户任务调度。

系统任务调度

系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc 目录下有一个 crontab 文件,这个就是系统任务调度的配置文件。

/etc/crontab ​ 文件包括下面几行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root       #如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/            #使用者运行的路径,这里是根目录
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行是用来配置 crond 任务运行的环境变量;
第一行 SHELL 变量指定了系统要使用哪个 shell,这里是 bash;
第二行 PATH 变量指定了系统执行命令的路径;
第三行 MAILTO 变量指定了 crond 的任务执行信息将通过电子邮件发送给 root 用户,如果 MAILTO 变量的值为空,则表示不发送任务执行信息给用户;
第四行的 HOME 变量指定了在执行命令或者脚本时使用的主目录。
"run-parts"这个参数,后面可以写要运行的某个脚本。

用户任务调度

用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的 crontab 文件都被保存在/var/spool/cron 目录中。其文件名与用户名一致,使用者权限文件如下:

/etc/cron.deny     该文件中所列用户不允许使用 crontab 命令
/etc/cron.allow    该文件中所列用户允许使用 crontab 命令
/var/spool/cron/   所有用户 crontab 文件存放的目录,以用户名命名

每个用户可以建立自己的调度 crontab(在 /var/spool/cron 目录下)。cron 服务每分钟不仅要读一次 /var/spool/cron 内的所有文件,还需要读一次 /etc/crontab,因此我们配置这个文件也能运用 cron 服务做一些事情。用 crontab 配置是针对某个用户的,而编辑 /etc/crontab 是针对系统的任务。

举例说明

两个周定时备份一次 /var/ftp 目录下的内容

* * 14 * * cd /back/ftp-back/ && rsync -avzc /var/ftp ./

定时插入数据

*/2 * * * * /bin/bash /home/zrg/.crontab/crontab.sh

定时备份 mysql 数据

#!/bin/sh
filename=`date +%Y%m%d%H%M%S`
mysqldump -u root -proot testdb>/home/zrg/crontab/$filename.sql
$ crontab -e
0 2 * * *  /bin/bash /home/zrg/crontab/cron.sh
$rccron reload

其他简单示例

// 每天 21:43 执行重启 smb 
43 21 * * * /etc/init.d/smb restart
// 每周一的 17:00 重启 smb
0 17 * * 1 /etc/init.d/smb restart
// 每周日,周二,周三的 17:00 和 17:10 执行
0,10 17 * * 0,2,3 /etc/init.d/smb restart
// 毎月 1 日从 17:00 到 17:10 毎隔 1 分钟 执行
0-10 17 1 * * /etc/init.d/smb restart
// 每 10 分钟执行重启 smb
*/10 * * * * /etc/init.d/smb restart
// 每 0,10,20,30,40,50 分重启 smb
0,10,20,30,40,50 * * * * /etc/init.d/smb restart
// 8:02,11:02,14:02,17:02,20:02 执行
2 8-20/3 * * * /etc/init.d/smb restart

4.2.2. 扩展阅读:唤醒式的工作任务

anacron 是什么?

anacron 与 crontab

Table 15: anacron vs crontab
crontabanacron
适合服务器适合桌面/笔记本电脑
它是守护进程非守护进程
关机时不会执行计划任务如果计划任务到期,机器是关机的,那么它会在机器下次开机后执行计划任务
可以让你以分钟级运行计划任务只能让你以天为基础来运行计划任务
普通用户和 root 用户都可以使用只有 root 用户可以使用(使用特定的配置启动普通任务)

anacron 与 /etc/anacrontab

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文