Loading... # [Linux 命令之crontab](https://segmentfault.com/a/1190000039774946) 命令简介 ---- 在服务器安装好系统及相关服务之后,对于系统的配置、服务的配置、数据的管理以及服务器的操作权限管理就变的尤为重要。因为,涉及到服务器的各项安全(如:登录、操作)。 crontab 命令用来打开 cron 表进行编辑。 定时任务:顾名思义,就是定期执行某项操作或者某种行为。像Windows系统同样它也有定时任务服务。 在Linux系统中,crond是Linux系统中用来定期执行命令、脚本或指定程序的一种服务。定时任务一般有以下两种用途: * 1、系统自身定期执行的操作或任务(如:日志轮询)。 * 2、用户定期执行的操作或任务(如:定时更新同步数据、重要数据备份等)。 Linux下的任务调度分为两类:系统任务调度和用户任务调度 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc/目录下有一个crontab文件,这个就是系统任务调度的配置文件。 /etc/crontab 文件内容如下 ```bash [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分钟的含义。 语法格式 ---- ```bash 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、对于生产环境的定时任务操作,必须在测试环境进行反复测试,确认无误后再应用到实际生产环境中,然后在定时任务执行后人工进行检查执行情况。 对于定时任务的具体实例及各类操作,可参考官方文档说明。读者也可在自己的实验环境进行书写、配置,本章节就不做过多赘述。 应用举例 ---- 查看当前登录用户下的定时任务情况 ```bash [root@centos7 ~]# crontab -l no crontab for root ``` 每小时的第5和第15分钟执行 ```bash 5,15 * * * * command_name ``` 在上午9点到11点的第5和第15分钟执行 ```bash 5,15 9-11 * * * command_name ``` 每隔3天的上午9点到11点的第5和第15分钟执行 ```bash 5,15 9-11 */3 * * command_name ``` 每个星期一的上午9点到11点的第5和第15分钟执行 ```bash 5,15 9-11 * * 1 command_name ``` 每月1、11、21日的14:45重启httpd ```bash 45 14 1,11,21 * * /etc/init.d/httpd restart ``` 每周六、周日的1:10重启smb ```bash 10 1 * * 6,0 /etc/init.d/httpd restart ``` 每小时执行/etc/scripts/test.sh这个脚本 ```bash 01 * * * * /etc/scripts/test.sh ``` ## 拓展 在Linux中,设置定时任务的方法有多种。以下是常见的几种方法及其使用说明: 1. 使用crontab命令: - 使用`crontab -e`命令编辑当前用户的cron表。 - 在打开的文件中,每一行代表一个定时任务,使用cron表达式来指定任务执行的时间。 - 例如,以下示例将在每天的上午9点运行脚本`/path/to/script.sh`: ```bash 0 9 * * * /path/to/script.sh ``` - 保存并关闭文件后,cron会自动加载更新后的cron表。 - 使用`crontab -l`命令查看当前用户的cron表。 2. 编辑系统级的/etc/crontab文件: - 使用文本编辑器打开`/etc/crontab`文件。 - 每一行代表一个定时任务,使用cron表达式来指定任务执行的时间和要执行的命令。 - 例如,以下示例将在每天的上午9点运行脚本`/path/to/script.sh`: ```bash 0 9 * * * root /path/to/script.sh ``` - 保存并关闭文件后,cron会自动加载更新后的cron表。 - 使用`crontab -l`命令查看当前用户的cron表。 3. 使用/etc/cron.d/目录: - 在`/etc/cron.d/`目录中创建一个文件,文件名可以自定义,但不要包含`.`或`/`字符。 - 文件内容格式与crontab相同,使用cron表达式来指定任务执行的时间和要执行的命令。 - 例如,创建一个名为`mytask`的文件,内容如下: ```bash 0 9 * * * root /path/to/script.sh ``` - 保存文件后,cron会自动加载更新后的cron表。 - 使用`crontab -l`命令查看当前用户的cron表。 4. 使用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](https://blog.csdn.net/heshihu2019/article/details/135840389) 最后修改:2024 年 01 月 25 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏