【Linux实用工具分享】-- crontab

分享一道网易的笔试题

linux系统中有如下cron任务:
20,40 */3 * * 1 sh test.sh
下面描述正确的是:
A 每周一每3小时,20分,40分,运行test.sh
B 每月1号每3小时,20分,40分,运行test.sh
C 每周一每3小时,每20分钟运行test.sh
D 每月1号每3小时,每20分钟运行test.sh

cron是什么

有的时候我们可能需要在Linux里面定时执行一些任务,比如备份数据库、更新系统、重新引导等。这些任务我们把它称之为【定时任务】,在Linux里面称为【cron任务】。cron用于【自动执行任务】,可以简化任务管理、提高任务执行效率。cron是一个守护进程,统一管理系统任务,并按照指定的时间间隔去执行。下面就来详细的给大家讲解cron怎么使用。

crontab文件

crontab即【cron table】的缩写,你可以理解成是一张包含所有cron任务的表,表里面制定了任务的执行规则。crontab文件分为两类:

系统自带的crontab文件

这些通常由需要【root】特权的Linux服务及关键应用程序使用。系统crontab文件位于/etc/crontab中,并且只能由root用户访问和编辑。通常用于配置系统范围的守护进程。crontab文件看起来类似下面这样:

在这里插入图片描述

用户创建的crontab文件

Linux用户还可以在crontab命令的帮助下创建自己的cron任务。创建的cron任务将以创建它们的用户身份运行。

所有cron任务都存储在/var/spool/cron(对于RHEL和CentOS发行版)和/var/spool/cron/crontabs(对于Debian和Ubuntu发行版)中,cron任务使用创建该文件的用户的用户名列出。

cron守护进程在后台不停的检查/etc/crontab文件和/var/spool/cron及/etc/cron.d*/目录。

crontab命令用于编辑cron文件。下面来看一下cron文件的结构。

crontab文件剖析

我们先来探索crontab文件的格式。crontab文件的基本语法包括5列,由星号表示,后跟要执行的命令。

*    *    *    *    *    command

此格式也可以表示如下:

m h d moy dow command

m h d moy dow /path/to/script

下面解释一下每个条目的含义

  • m:代表分钟,范围是0到59;
  • h:表示小时,范围是0到23;
  • d:代表一个月中的某天,范围是1到31;
  • moy:这是一年中的月份,范围是1到12;
  • dow:这是星期几,范围是0到6,其中0代表星期日;
  • command:这是要执行的命令,例如备份命令、重新启动和复制命令等。

管理cron任务

看完crontab文件的结构之后,让我们看看如何创建、编辑和删除cron任务。

创建 cron 任务

要以root用户身份创建或编辑cron任务,请运行以下命令:

# crontab -e

要为另一个用户创建或安排cron任务,请使用以下语法:

# crontab -u username -e

例如,要以test用户身份运行cron任务,使用以下命令:

# crontab -u test -e

如果该crontab文件尚不存在,那么你将打开一个空白文本文件。如果该crontab文件已经存在,则-e选项会让你编辑该文件。

列出 crontab 文件

要查看已创建的cron任务,只需传递-l选项:

# crontab -l

删除crontab文件

要删除cron任务,运行

crontab -e

并删除不需要的cron任务行,然后保存该文件。

如果要删除所有的 cron 任务,可以运行以下命令:

# crontab -r

crontab示例

crontab文件说白了就是一个bash脚本,所以在文件的第一行需要声明bash解释器。

#!/bin/bash

◆每天12:30重启系统◆

30  12 *  *  * /sbin/reboot

◆凌晨4点重启◆

0  4  *  *  *  /sbin/reboot

注:星号 * 用于匹配所有记录。

◆4:00和16:00运行◆

0  4,16  *  *  *  /path/to/script

◆星期五下午5:00运行◆

0  17  *  *  Fri  /path/to/script

或者

0 17  *  * 5  /path/to/script

◆每30分钟运行一次◆

*/30  *  *  *  * /path/to/script

◆每5小时运行一次◆

*  */5  *  *  *  /path/to/script

◆周三和周五的下午6:00◆

0  18  *  *  wed,fri  /path/to/script

◆运行多个命令◆

*  *  *  *  *  /path/to/script1 ; /path/to/script2

使用特殊字符串

某些cron任务可以使用对应特定时间间隔的特殊字符串来配置。

@hourly

@hourly时间戳等效于0 * * * *,将在每小时的第一分钟执行一次任务。

@hourly /path/to/script

@daily

@daily时间戳等效于0 0 * * *,在每天的第一分钟(午夜)执行任务。它可以在执行日常工作时派上用场。

@daily /path/to/script

@weekly

@weekly时间戳等效于0 0 * * 0,在每周的第一分钟执行cron任务, 需要注意的是,一周第一天是从星期日开始的。

@weekly /path/to/script

@monthly

@monthly时间戳等效于0 0 1 * *,在每月第一天的第一分钟执行任务。

@monthly /path/to/script

@yearly

@yearly时间戳等效于0 0 1 1 *,在每年的第一分钟执行任务,比如可以用它发送新年问候。

@yearly /path/to/script

crontab的权限

作为 Linux 用户,你可以控制谁有权使用crontab命令。可以通过/etc/cron.deny和/etc/cron.allow文件来控制。默认情况下,只有一个/etc/cron.deny文件,并且不包含任何条目。要限制用户使用crontab命令,只需将用户的用户名添加到文件中即可。当用户被添加到该文件中,并且用户尝试运行crontab命令时,他就会遇到【权限禁止】的问题。

要允许用户继续使用crontab程序,只需从/etc/cron.deny文件中删除用户名即可。

如果存在/etc/cron.allow文件,则仅文件中列出的用户可以访问和使用crontab程序。

如果两个文件都不存在,则只有root用户具有使用crontab命令的权限。

备份crontab条目

建议大家在使用crontab的时候都养成备份的习惯。可以使用以下语法:

# crontab -l > /path/to/file.txt

检查cron日志

cron日志存储在/var/log/cron文件中。要查看cron日志,运行以下命令:

# cat /var/log/cron

要实时查看日志,使用tail命令,如下所示:

# tail -f /var/log/cron

总结

cron是Linux里面非常实用的工具,在面试中也会有比较高的命中率。如果学会使用了cron,开发中将会变的事半功倍,因为很多不知道的同学可能还要自己去写定时程序。最后,不要忘记文章开头还有个笔试题哦!

更多视频、文章、嵌入式学习资源,微信关注 【学益得智能硬件】

在这里插入图片描述

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页