crontab 只执行一次_【Linux实用工具分享】 crontab

87265aa25ea03e203f176885ae763e63.png

分享一道网易的笔试题

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

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

0 2PART crontab文件

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

1 系统自带的crontab文件

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

2975ea43826d87eface5ab130887a878.png

2 用户创建的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文件的结构。

0 3PART 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:这是要执行的命令,例如备份命令、重新启动和复制命令等。

0 4PART 管理cron任务

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

1 创建 cron 任务

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

# crontab -e
要为另一个用户创建或安排cron任务,请使用以下语法:
# crontab -u username -e

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

# crontab -u test -e

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

2 列出 crontab 文件

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

# crontab -l
3 删除crontab文件

要删除cron任务,运行

crontab -e

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

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

# crontab -r
0 5PART 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
0 6PART 使用特殊字符串

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

01 @hourly

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

@hourly /path/to/script
02 @daily

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

@daily /path/to/script
03 @weekly

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

@weekly /path/to/script
04 @monthly

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

@monthly /path/to/script
05 @yearly

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

@yearly /path/to/script
0 7PART crontab的权限

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

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

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

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

0 8PART 备份crontab条目

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

# crontab -l > /path/to/file.txt
0 9PART 检查cron日志

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

# cat /var/log/cron

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

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

PS.给小伙伴们汇报个事:

《春季智能硬件工程师培训班》

启动报名,限额25位

努力提升硬实力

备战秋招

有需要的小伙伴请提前报名锁定席位?

0d00e91e5e2e3375a1c1b6de7d88b3d3.png

e942940d0640372fc43d3e8fe73083c4.png

36b36157c6625d36733eb796bdf695b4.png

b18103bcef62891ab2228aff8377b5f2.png

58eb605f87fdb965f5415e39b4ef65c2.png

6dd2d968fe24fe3ac26a8c06c4f8c101.png

37b1e69b03c27d9150f904394555ed00.png

937ffa907b7a8e2683c781521b21f1db.png

285dd7626dd8e3ece64612448a2adb74.png


版权声明:本文为weixin_34581259原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。