栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

crontab工具简介查看用户的定时进程编辑定时进程

编辑命令CRON表达式计算CRON表达式的执行时间CRON表达式的字段

标准字段非标准字段 移除定时进程

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文件时给确认提示
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/705409.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号