分享一道网易的笔试题
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
文件看起来类似下面这样:
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文件的基本语法包括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
:这是要执行的命令,例如备份命令、重新启动和复制命令等。
看完crontab文件的结构之后,让我们看看如何创建、编辑和删除cron任务。
1 创建 cron 任务要以root用户身份创建或编辑cron任务,请运行以下命令:
# crontab -e
要为另一个用户创建或安排cron任务,请使用以下语法:# crontab -u username -e
例如,要以test用户身份运行cron任务,使用以下命令:
# crontab -u test -e
如果该crontab文件尚不存在,那么你将打开一个空白文本文件。如果该crontab文件已经存在,则-e
选项会让你编辑该文件。
要查看已创建的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
命令的权限。
建议大家在使用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位
努力提升硬实力
备战秋招
有需要的小伙伴请提前报名锁定席位?