【服务器管理】Ubuntu的定时进程管理工具crontab

crontab工具简介

Linux crontab是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。在Ubuntu中可以通过以下命令安装crontab工具:

sudo apt-get install cron # 安装
sudo service cron start # 启动
sudo service cron restart # 重启
sudo service cron stop # 停止
sudo service cron status # 查看状态
sudo service cron # 查询cron可用的命令

查看用户的定时进程

  • 用户自己可以使用以下命令查看当前用户的定时进程:
crontab -l
  • 管理员可以使用以下命令查看用户的定时进程:
cat /etc/passwd | cut -f 1 -d: | xargs -I {} crontab -l -u {} | grep -v "^#"

如果是使用了NIS认证服务的从服务器(从节点),则可以使用以下命令查看所有用户的定时进程:

ypcat passwd | cut -f 1 -d: | xargs -I {} crontab -l -u {} | grep -v "^#"

或者创建下面的crontab_all_user.sh文件:

#!/bin/bash
# vim filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。
for u in $(cat /etc/passwd | cut -d":" -f1)
do
    echo $u>>temp.txt
    crontab -l -u $u >> temp.txt
done
cat temp.txt
rm temp.txt

然后运行该命令,同样可以查看所有用户的定时进程:

bash crontab_all_user.sh

编辑定时进程

Linux 任务调度的工作主要分为以下两类:

  • 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  • 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

编辑命令

使用以下命令编辑定时进程:

crontab -e

注意: 第一次进入的时候要选择编辑器,选择后你可以配置新cron作业了,一般是选vim.basic

同时,可以通过参数-u user来设定某个用户的crontab服务。

CRON表达式

CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。注释以注释标记#开始,并且必须单独在一行上。在Linux中,CRON表达式为:

f1 f2 f3 f4 f5 program
  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
  • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
  • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

例如:

 0 */12 * * * [user] [command] 

每一分钟执行一次 /bin/ls:

* * * * * /bin/ls

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “Hello world”:

20 0-23/2 * * * echo "haha"

每月1号和15号检查/home 磁盘:

0 0 1,15 * * fsck /home

计算CRON表达式的执行时间

使用工具https://tool.lu/crontab可以计算CRON表达式的执行时间,例如:
在这里插入图片描述

CRON表达式的字段

字段是否必填允许值允许特殊字符备注
Seconds0–59*,-标准实现不支持此字段
Minutes0–59*,-
Hours0–23*,-
Day of month1–31*,-?LW?LW只有部分软件实现了
Month1–12 or JAN–DEC*,-
Day of week0–7 or SUN–SAT*,-?L#?L#只有部分软件实现了;Linux和Spring的允许值为0-7,0和7为周日;Quartz的允许值为1-7,1为周日
Year1970–2099*,-标准实现不支持此字段

标准字段

  • 逗号,用于分隔列表。例如,在第5个字段(星期几)中使用 MON,WED,FRI 表示周一、周三和周五。
  • 连字符-定义范围。例如,2000-2010 表示2000年至2010年期间的每年,包括2000年和2010年。
  • 除非用反斜杠()转义,否则命令中的百分号(%)会被替换成换行符,第一个百分号后面的所有数据都会作为标准输入发送给命令。

非标准字段

  • “L”代表“Last”。当在星期几字段中使用的时候,可以指定给定月份的结构,例如“最后一个星期五”(5L)。在月日字段中,可以指定一个月的最后一天。

  • “day of month”字段可以使用“W”字符。指定最接近给定日期的工作日(星期一-星期五)。例如,15W,意思是:“最接近该月15日的工作日。”;所以,如果15号是星期六,触发器在14号星期五触发。如果15日是星期天,触发器在16日星期一触发。如果15号是星期二,那么它在15号星期二触发。“1W”,如果这个月的第一天是星期六,不会跨到上个月,触发器会在这个月的第三天(也就是星期一)触发。只有指定一天(不能是范围或列表)的时候,才能指定“W”字符。

  • 星期几字段可以使用“#”,后面必须跟一个介于1和5之间的数字。例如,5#3表示每个月的第三个星期五。

  • 在某些实现中,“?”用来代替“”以将月中的某一天或周中的某一天留空。其他cron的实现是替换“?”为cron守护进程的启动时间,例如:?? * * *,如果cron在上午8:25启动,将更新为25 8 * * * 并在每天的这个时间运行,直到再次重新启动。

  • 分钟字段设置 */5表示每5分钟一次,注意:这里指的是能被5整除的分钟数。

移除定时进程

  • 使用下面的命令移除已经计划的cron作业:
crontab -r
  • 使用下面的命令移除所有已计划的cron作业,且无需再次确认:
crontab -ir

常用的参数有:

参数说明
-u user用来设定某个用户的crontab服务
filefile是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab
-e编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件
-l显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容
-r从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件
-i在删除用户的crontab文件时给确认提示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YirongChen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值