第四篇、crontab定时任务的用法

linux系统是由cron(crond)这个系统服务来控制的。linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外,由于使用者自己可以设置计划任务,所以linux系统也提供了使用者控制计划任务的命令:crontab命令

crond简介

crond是linux下用来周期性的执行某种任务或者等待处理某些事件的一个守护进程。
linux下面的任务调度分为两类,系统任务调度和用户任务调度

  • 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等
  • 用户任务调度:用户自己定义的计划
crond服务

  • 确认crontab是否安装
    crontab -l
    • 如果报"command not found",就说明crontab没有安装
    • 如果报"no crontab for root", 就说明已经安装crontab
  • 安装crontab
yum install crontabs
  • 服务操作命令
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
  • 查看crontab服务状态
service crond status
  • 手动启动crontab服务
service crond start
  • 查看crontab服务是否已经设置为开机启动
ntsysv
  • 加入开机自动启动
chkconfig –level 35 crond on
配置

/etc/crontab 这个是系统任务调度的配置文件

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=””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
[root@localhost ~]#
  • 第一行SHELL变量指定了系统要使用哪个shell
  • 第二行PATH变量指定了系统执行命令的路径
  • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送root用户,如果MAILTO变量的值为空,则表示不发送任务
  • 第四行的HOME变量指定了再执行命令活脚本时使用的主目录
文件目录信息

  • /etc/cron.deny
    该文件中所列用户不允许使用crontab命令
  • /etc/cron.allow
    该文件中所列用户允许使用crontab命令
  • /var/spool/cron
    该文件夹存放所有用户的crontab文件,以用户名命名
  • /var/log/cron*
    查看crontab运行的日志路径(脚本的具体运行信息不在这里面)
  • /var/spool/mail/root
    查看脚本执行过程的具体信息(具体信息会通过邮箱发到该用户下)
计划任务时间配置

在这里插入图片描述
在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
crontab命令详解

  1. 格式
    crontab [-u user] file
    crontab [-u user] [ -e | -l | -r ]
  2. 功能
    通过crontab命令,我们可以再固定的间隔时间执行的系统指令或shell script脚本。
  3. 命令参数
    • -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
    • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
    • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
    • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
    • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
    • -i:在删除用户的crontab文件时给确认提示。
常用方法

  • 创建一个新的crontab文件,并将其配置
    比如:下面的内容,代表没分钟执行/opt/crontab/top.sh脚本
    */1 * * * * /etc/profile;/bin/sh /opt/crontab/top.sh
  • 然后通过crontab [file] ,来将该文件交给crontab进程
  • 编辑crontab文件
    $ crontab -e
  • 删除crontab文件
    crontab -r
注意事项

  1. 环境变量的问题
    • 手动运行脚本可以,但是通过crontab不运行,这时候可以再crontab中直接引入环境变量解决问题
      */1 * * * * /etc/profile;/bin/sh /opt/crontab/top.sh
    • 如果脚本执行中需要用到其他环境变量时,通过source命令引入环境变量
    #!/bin/sh
    source /etc/profile
    
  2. 脚本中涉及文件路径时全写全局路径
  3. 脚本权限问题,给用户/bin/sh,/etc/profile 运行权限
  4. 定时任务添加注解
  5. 注意清理系统用户的邮件日志(每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。)
使用实例

  1. 每1分钟执行一次command
    * * * * * command
  2. 每小时的第3和第15分钟执行
    3,15 * * * * command
  3. 在上午8点到11点的第3和第15分钟执行
    3,15 8-11 * * * command
  4. 每隔两天的上午8点到11点的第3和第15分钟执行
    3,15 8-11 */2 * * command
  5. 每个星期一的上午8点到11点的第3和第15分钟执行
    3,15 8-11 * * 1 command
  6. 每晚的21:30重启smb
    30 21 * * * /etc/init.d/smb restart
  7. 每月1、10、22日的4 : 45重启smb
    45 4 1,10,22 * * /etc/init.d/smb restart
  8. 每周六、周日的1 : 10重启smb
    10 1 * * 6,0 /etc/init.d/smb restart
  9. 每天18 : 00至23 : 00之间每隔30分钟重启smb
    0,30 18-23 * * * /etc/init.d/smb restart
  10. 每星期六的晚上11 : 00 pm重启smb
    0 23 * * 6 /etc/init.d/smb restart
  11. 每一小时重启smb
    * */1 * * * /etc/init.d/smb restart
  12. 晚上11点到早上7点之间,每隔一小时重启smb
    * 23-7/1 * * * /etc/init.d/smb restart
  13. 每月的4号与每周一到周三的11点重启smb
    0 11 4 * mon-wed /etc/init.d/smb restart
  14. 一月一号的4点重启smb
    0 4 1 jan * /etc/init.d/smb restart
  15. 每小时执行/etc/cron.hourly目录内的脚本
    01 * * * * root run-parts /etc/cron.hourly

run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

<think>好的,我现在需要帮助用户了解crontab定时任务的使用教程和配置方法。首先,我应该回忆一下自己对crontab的了解,确保信息准确。crontab是Linux系统中用于设置周期性执行任务的工具,用户可以通过编辑crontab文件来添加定时任务。 接下来,我需要参考用户提供的引用内容。引用[1]提到定时任务文件位于/etc/crontab,可以用vim编辑。引用[3]说明了基本命令,比如crontab -l查看,crontab -e编辑,crontab -r删除。引用[5]给出了一些配置实例,比如每小时执行脚本。这些信息都很关键,需要整合到回答中。 用户的问题分为教程和配置方法两部分。教程部分应该包括基本命令和权限管理,配置方法需要详细解释时间语法和示例。另外,用户提供的引用中有一些细节,比如如何重新加载服务(service crond restart)和用户参数(-u),这些也要涵盖进去。 需要注意用户可能遇到的常见问题,例如路径问题、环境变量,以及如何调试任务。此外,引用[4]提到crontab配置到秒,但通常crontab最小单位是分钟,可能需要说明替代方法,比如在命令中使用sleep来实现秒级任务。 最后,生成相关问题时要围绕crontab的进阶使用、错误排查、权限管理和特殊场景,确保覆盖用户可能感兴趣的方面。同时,检查引用标识是否正确添加,避免遗漏。</think>### Crontab定时任务使用教程与配置方法 #### 一、基础概念 Crontab是Linux系统中用于配置周期性任务的工具,通过预定义时间规则执行指定命令或脚本。其核心文件包括: - 系统级配置:$/etc/crontab$(需root权限编辑)[^1] - 用户级配置:存储在$var/spool/cron$目录下,通过$crontab -e$命令编辑[^3] #### 二、核心操作命令 1. **查看任务** ```bash crontab -l # 查看当前用户的任务列表 crontab -u username -l # 查看指定用户任务(需root权限)[^4] ``` 2. **编辑任务** ```bash crontab -e # 进入Vim编辑界面 ``` 3. **删除任务** ```bash crontab -r # 清空当前用户所有任务 ``` 4. **服务重载** ```bash service crond restart # 使新配置生效[^2] ``` #### 三、配置语法详解 任务行的标准格式为: $$分钟\ 小时\ 日期\ 月份\ 星期\ 用户(系统级)\ 命令$$ | 字段 | 取值范围 | 特殊符号 | |------|----------|-------------------| | 分钟 | 0-59 | *, - , / | | 小时 | 0-23 | | | 日期 | 1-31 | | | 月份 | 1-12 | | | 星期 | 0-7 | (0和7都代表周日)| **示例配置**: ```bash 0 3 * * * root /backup.sh # 每天3:00执行备份[^5] */5 * * * * /monitor.sh # 每5分钟执行监控 @reboot /init_service.sh # 系统启动时执行 ``` #### 四、进阶配置技巧 1. **路径问题** 建议使用绝对路径,或在脚本开头添加: ```bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin ``` 2. **日志记录** 追加输出重定向: ```bash * * * * * /script.sh >> /var/log/cron.log 2>&1 ``` 3. **秒级任务实现** 虽然crontab最小单位为分钟,可通过sleep实现秒级: ```bash * * * * * sleep 30; /task.sh # 每分钟第30秒执行[^4] ``` #### 五、调试与排查 1.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值