Linux 命令之crontab

dafenqi
2023-08-30 / 0 评论 / 21 阅读 / 正在检测是否收录...

Linux 命令之crontab

命令简介

在服务器安装好系统及相关服务之后,对于系统的配置、服务的配置、数据的管理以及服务器的操作权限管理就变的尤为重要。因为,涉及到服务器的各项安全(如:登录、操作)。

crontab 命令用来打开 cron 表进行编辑。

定时任务:顾名思义,就是定期执行某项操作或者某种行为。像Windows系统同样它也有定时任务服务。

在Linux系统中,crond是Linux系统中用来定期执行命令、脚本或指定程序的一种服务。定时任务一般有以下两种用途:

  • 1、系统自身定期执行的操作或任务(如:日志轮询)。
  • 2、用户定期执行的操作或任务(如:定时更新同步数据、重要数据备份等)。

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

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

/etc/crontab 文件内容如下

[root@centos7 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

从上机的配置文件,可以看出系统定时任务格式/etc/crontab分为6段,以空格分隔。前5段为时间格式,第6段是所需执行的命令。详细的说明:

minute #分钟,可以是从0到59之间的任何整数
hour #小时,可以是从0到23之间的任何整数
day #日期,可以是从1到31之间的任何整数
month #月份,可以是从1到12之间的任何整数
week #星期,可以是从0到7之间的任何整数,这里的0或7代表星期日
command #执行的命令,可以是系统命令,也可以是自己编写的脚本文件

在上述的配置字段中,还会使用到下面的特殊字符

*(星号) #表示所有值。比如在第一段中如果使用*,则表示在满足其他条件的同时每分钟都执行后面的命令操作。
,(逗号) #用逗号分隔的值表示指定的一个范围。比如在第四段使用1,3,5,7,则表示在第1,3,5,7月的含义。
—(中杠) #表示一个范围。比如在第二段使用0-8,则表示0点到8点这一区间范围。
/(正斜线) #表示一个时间的间隔频率。比如在第一段使用*/5,则表示每间隔5分钟的含义。

语法格式

crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]

选项说明

-e #编辑该用户的计时器
-l #列出该用户的计时器
-r #删除该用户的计时器
-u<用户名称> #指定要设定计时器的用户名称
-i:在删除定时任务列表时进行确认提示
-s:显示该用户的下一个定时任务执行时间

定时任务书写与配置

书写定任务规范

在日常实际生产、测试环境中,书写定时任务是需要遵守一定的规范、规则的。笔者根据自己实际生产环境书写经验,总结如下:

  • 1、书写定时任务时必须对每一行或一段加上注释信息。
  • 2、如里是以shell脚本执行的任务,在最前面加上解释/bin/sh。
  • 3、对于执行脚本的定时任务,需在其结尾加上>/dev/null 2>&1将一些不必要的输出信息重定向到空,也就是不输出不需要的信息。
  • 4、使用系统或服务命令要使用绝对路径,再写到脚本,最后将脚本写进定时任务中。
  • 5、规范使用目录(如定时任务执行的脚本目录设置成/server/cron_scripts)。
2)定时任务配置

实际生产、测试环境,对于定时任务的配置也是需要有一定操作规范的,具体如下:

  • 1、对于执行命令的形式的定时任务,需要先测试命令执行情况,确认无误后将执行的命令写进脚本。
  • 2、对于脚本形式的定时任务,首先就是需要调试脚本的整体执行情况,然后使用规范目录路径写进定时任务。
  • 3、对于生产环境的定时任务操作,必须在测试环境进行反复测试,确认无误后再应用到实际生产环境中,然后在定时任务执行后人工进行检查执行情况。

对于定时任务的具体实例及各类操作,可参考官方文档说明。读者也可在自己的实验环境进行书写、配置,本章节就不做过多赘述。

应用举例

查看当前登录用户下的定时任务情况

[root@centos7 ~]# crontab -l
no crontab for root

每小时的第5和第15分钟执行

5,15 * * * * command_name

在上午9点到11点的第5和第15分钟执行

5,15 9-11 * * * command_name

每隔3天的上午9点到11点的第5和第15分钟执行

5,15 9-11 */3 * * command_name

每个星期一的上午9点到11点的第5和第15分钟执行

5,15 9-11 * * 1 command_name

每月1、11、21日的14:45重启httpd

45 14 1,11,21 * * /etc/init.d/httpd restart

每周六、周日的1:10重启smb

10 1 * * 6,0 /etc/init.d/httpd restart

每小时执行/etc/scripts/test.sh这个脚本

01 * * * * /etc/scripts/test.sh

拓展

在Linux中,设置定时任务的方法有多种。以下是常见的几种方法及其使用说明:

  1. 使用crontab命令:

    • 使用crontab -e命令编辑当前用户的cron表。
    • 在打开的文件中,每一行代表一个定时任务,使用cron表达式来指定任务执行的时间。
    • 例如,以下示例将在每天的上午9点运行脚本/path/to/script.sh
0 9 * * * /path/to/script.sh
  • 保存并关闭文件后,cron会自动加载更新后的cron表。
  • 使用crontab -l命令查看当前用户的cron表。
  1. 编辑系统级的/etc/crontab文件:

    • 使用文本编辑器打开/etc/crontab文件。
    • 每一行代表一个定时任务,使用cron表达式来指定任务执行的时间和要执行的命令。
    • 例如,以下示例将在每天的上午9点运行脚本/path/to/script.sh
0 9 * * * root /path/to/script.sh
  • 保存并关闭文件后,cron会自动加载更新后的cron表。
  • 使用crontab -l命令查看当前用户的cron表。
  1. 使用/etc/cron.d/目录:

    • /etc/cron.d/目录中创建一个文件,文件名可以自定义,但不要包含./字符。
    • 文件内容格式与crontab相同,使用cron表达式来指定任务执行的时间和要执行的命令。
    • 例如,创建一个名为mytask的文件,内容如下:
0 9 * * * root /path/to/script.sh
  • 保存文件后,cron会自动加载更新后的cron表。
  • 使用crontab -l命令查看当前用户的cron表。
  1. 使用systemd的定时器:

    • 创建一个.timer文件,用于配置定时器的触发条件和要执行的任务。
    • 创建一个.service文件,用于定义要执行的任务的具体命令和其他设置。
    • 将这两个文件放置在/etc/systemd/system/目录中。
    • 运行systemctl daemon-reload命令,以重新加载systemd配置。
    • 使用systemctl start mytimer.timer命令启动定时器。
    • 使用systemctl enable mytimer.timer命令将定时器设置为开机启动。
    • 使用systemctl status mytimer.timer命令查看定时器的状态。

这些方法之间的区别主要在于使用的工具和配置方式。crontab命令和/etc/crontab文件是传统的cron工具,适用于简单的定时任务。/etc/cron.d/目录允许将定时任务分散到多个文件中,更灵活。使用systemd的定时器提供了更精确的时间控制和更高级的功能,适用于需要更复杂任务调度的场景。

选择最好的方法取决于您的具体需求和使用场景。如果只需要为当前用户设置定时任务,使用crontab命令是最简单和常见的方法。如果需要为整个系统或其他用户设置定时任务,可以选择编辑/etc/crontab文件或使用/etc/cron.d/目录。如果您使用的是systemd作为初始化系统,并且需要更高级的功能和集成,可以考虑使用systemd的定时器。

请根据您的具体需求和系统配置选择最适合您的方式,并参考相关文档以获取更详细的使用说明。

systemd进程管理工具详细教程请看这:Linux 命令之systemd

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消