首页 > 系统相关 >linux crontab 定时任务详解

linux crontab 定时任务详解

时间:2023-01-05 14:55:51浏览次数:45  
标签:Run crontab cron 任务 详解 linux 定时 once

前言

正如闹钟对于日常生活的重要性一样,linux crontab 定时任务在开发中是必不可少的工具,诸如:每六个月清理一次日志,每天凌晨 12.00 重启服务等多种场景,都可以用 crontab 搞定。

本文测试环境为 Ubuntu 22.04,某些细节不同的发行版可能有所差异,以各自手册为主。

快速开始

友情提示:在你的 .bashrc 文件中设置你常用的编辑器,比如: export EDITOR=vim,后续编辑的时候就不会弹出其他陌生的编辑器了。

输入 crontab -e 并在文件末尾输入 */2 * * * * date >> /tmp/test-crontab.txt(后续会对这句话的含义做解释,此处先不用纠结),多等待几分钟后看看 /tmp 目录下生成的 test-crontab.txt 文件中的内容。

如上图所示,我们实现了每隔 2 分钟将当前日期追加到文件中的功能,一行命令一句表达式,crontab 的使用就是这么简单。

在详细解释 crontab 表达式的具体含义之前,来看看其他的操作。

crontab -l 查看当前运行的定时任务

crontab -r 删除所有的定时任务

注意:如果要停止某个定时任务,只需要 -e 的时候使用 # 将其注释即可。

表达式

.---------------- 分 minute (0 - 59)|  .------------- 时 hour (0 - 23)|  |  .---------- 天 day of month (1 - 31)|  |  |  .------- 月 month (1 - 12) OR jan,feb,mar,apr ...|  |  |  |  .---- 周 day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat|  |  |  |  |m h dom mon dow

特殊的取值

* 所有,例如对于 minute 来说,* 等价于 0-59, 数组,例如 1,3,5- 段,例如 1-3 等价于 1,2,3/ 间隔,例如对于 minute 来说,*/2 代表每 2 分钟

它们也可以结合在一起使用,如:1-5/2

特殊的写法

除了上面的表达式之外,还有类似编程语法中的语法糖,更加直白一点

@reboot        Run once, at startup.@yearly        Run once a year, "0 0 1 1 *".@annually      (same as @yearly)@monthly      
Run once a month, "0 0 1 * *".@weekly Run once a week, "0 0 * * 0".@daily Run once a day, "0 0 * * *".@midnight (same as @daily)@hourly Run once an hour, "0 * * * *".

举个例子

说的再多,不如实战几个例子来得更加清晰易懂

5 0 * * * 每天的 00:05 点

15 14 1 * * 每个月 1 号的 14:15

0 22 * * 1-5 每周从周一到周五 22:00

虽然 crontab 不复杂,但是也没那么直白,需要大脑稍微翻译一下,并且 crontab 不太方便测试任务什么时间运行,此时借助在线的 https://crontab.guru/ 工具,我们就能写出正确的表达式,并且点击 next 还可以看到任务运行的时间点。

多用户管理

linux 系统是一个多用户系统,crontab 也支持多用户,默认使用当前用户,使用 crontab -u username 便可以指定其他用户。

比如 sudo crontab -u root -e 便可编辑 root 用户的配置,不同用户的配置保存在 /var/spool/cron/crontabs 目录下。

除此之外,/etc/cron.allow 文件控制哪些用户可以使用 crontab,/etc/cron.deny 文件控制哪些用户不可以使用 crontab。

系统级的 crontab

 /etc/crontab 文件中设置的是一些系统级的定时任务,其中每行都多了一个执行用户,并且直接编辑该文件而不是使用 crontab 命令来管理。

问题排查

所有的定时任务都是由 cron 守护进程来负责调度执行的,如果任务未按照你的预期运行,可以通过 systemctl status cron.service 查看守护进程是否 running。

下图的日志还可以看到由于缺少用户名导致语法错误,一个定时任务被忽略,使用 journalctl -u cron.service 还可以查看更多的日志信息。

 

 

参考

man 1 crontab

man 5 crontab

man 8 cron

 

标签:Run,crontab,cron,任务,详解,linux,定时,once
From: https://www.cnblogs.com/zhaoruixiao/p/17027530.html

相关文章

  • 2_Linux中的网络配置
    服务器Linuxcentosip地址虚拟机中的网络配置1、桥接模式使用当前计算机中本地连接中的物理网卡虚拟机中自动获取的ip网段都在主机192.168......
  • 每日八题--Linux
    *********0104linux*********9.linux中常用目录解析/etc:存放配置文件mysql的配置文件默认在哪里?/usr/local/mysql/bin/mysqld/home:普通用户的家目录,在Linux中,每个用......
  • linux 命令使用5--vmstat(内存)
    1.简介如果你想动态的了解一下系统资源的使用状况,以及查看当前系统中到底是哪个环节最占用系统资源,就可以使用 vmstat命令。vmstat命令,是VirtualMeomoryStatistics(......
  • Centos7系统中mongodb的安装详解
    MongoDB的下载网址1.下载完成后上传解压并重命名为mongodb2.在mongodb目录下创建data、logs目录[root@kht118mongodb]#mkdirdatalogs3.创建logs/mongodb.log文......
  • Linux 使用crontab设置定时任务
    1.查看crond服务是否启动#systemctlstatuscrond 如未安装服务,采用如下命令安装:#yum-yinstallvixie-cron//vixie-cron软件包是cron的主程序;#......
  • linux服务器cup100%问题排查
    一、出现问题在发现公司门禁服务无法开门的第一时间,去线上服务器上查看了一下进程的运行情况,具体运行如下:   第一次在查看的时候发现并没有我需要的服务entrancegua......
  • Linux USB设备驱动(一)
    USB(通用串行总线的缩写)被设计为一种低成本的串行接口解决方案,总线电源由USB主机提供,以支持广泛的外围设备。USB最初的总线速度是1.5Mbps的低速,然后是12Mbps的全速,然后......
  • unity之network客户端向服务器发送消息【Command】方法详解
    如果是纯粹是聊天室功能则可以使用NetworkView的方法来进行,简单实用。如果不是聊天室功能而是要传递数据给服务器,同时为了以后更多功能的拓展性,还是应该用networkmanager来......
  • Centos Linux 离线安装 MySQL 5.7
    1、下载  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz2、创建mysql属组、用户、安装目录#创建新数组mysql......
  • Linux内存分配小结
    Linux的虚拟内存管理有几个关键概念:1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚......