欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux中计划任务管理(croutab、at)

程序员文章站 2022-07-14 18:38:37
...

一、at一次性计划任务的设置

  • at 命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务 atd 必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正确设置计划任务。
  • 设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间)
  • 设置完成后最后按 Ctrl+D 组合键提交任务。所设置的命令操作将在计划的时间点被执行。
[[email protected] ~]# date
2020年 11月 03日 星期二 07:22:21 CST
[[email protected] ~]# at 07:25 2020-11-03
at> pgrep -U root |wc -l >/opt/1.txt
at> <EOT>
job 1 at Tue Nov  3 07:25:00 2020	//任务设置完毕后按Ctrl+D 组合键提交
//验证计划任务
[[email protected] ~]# cat /opt/1.txt   	//等过了计划时间后验证执行结果
204
[[email protected] ~]# at 23:55
at> shutdown -h now     //关机
at> <EOT>
job 2 at Tue Nov  3 23:55:00 2020

[[email protected] ~]# atq   //查看一次性计划任务
2	Tue Nov  3 23:55:00 2020 a root

[[email protected] ~]# atrm 2	//删除第 2 条 at 计划任务

[[email protected] ~]# atq	//确认第 2 条任务已被删除

二、croutab周期性计划任务设置

1、croutab的配置文件和目录解析

  • crond 通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置。

  • crond 守护进程会自动检查/etc/crontab 文件、/etc/cron.d/(定时任务)目录及 /var/spool/cron/目录中的改变,如果发现有配置更改,它们就会被载入内存,所以当某个 crontab 文件改变后并不需要重新启动 crond 守护进程就可以使设置生效。

1)/etc/crontab——系统任务配置文件
  • /etc/crontab 文件中设置的是维护 Linux 操作系统所需的任务,Linux 操作系统及相关程序在安装时可自动设置,不建议用户手动修改此文件。
[[email protected] ~]# cat /etc/crontab
SHELL=/bin/bash     //设置执行计划任务的Shell 环境
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
----------------------------------------------------------------------------------------------
分钟  	取值为 0~59 的任意整数
小时	    取值为 0~23 的任意整数
日期  	取值为 1~31 的任意整数(日期在该月份中必须有效) 
月份	    取值为 1~12 的任意整数
星期  	取值为 0~7 的任意整数,0 或 7 代表星期日

命令	    可以是普通的命令,也可以是自己编写的程序脚本
2) /etc/cron.d/(定时任务)目录
  • crontab 是日常使用最为频繁地定时器工具。它将每个用户的所有定时任务统一记录、统一管理。但对于项目系统中的定时任务而言,不同的定时任务可能需要交由不同的系统帐号执行。但如此,管理又很容易出现疏漏,比较尴尬。特别是当项目地不同时期由不同人员负责时,出现疏漏地概率会变得更高。这种情况下,将所有定时任务以文件方式统一管理地 /etc/cron.d 似乎就更被我们所亲睐。

  • /etc/cron.d 文件夹中的任务文件命名有特殊要求,只能使用 [\w-] 字符,不能有 . !

crontab 的定时任务格式是:
# MIN HOUR DAY MON WEEK CMD
*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1
//每一分钟同步一次阿里云时间服务器

/etc/cron.d 的任务文件格式与之基本相似,唯独多了 USER 一项:
# MIN HOUR DAY MON WEEK USER CMD
*/1 * * * * root /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1


我们可以这样的等价指令来理解 /etc/cron.d 的定时任务是如何被执行地:

'sudo' -u <USER> -H <CMD>

最原始、最粗糙地识别方法——基于执行帐号判断
如果执行帐号是系统帐号,那么就 /etc/cron.d ;如果执行帐号是非系统帐号,那么就 crontab 。


如果 /etc/cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
如果 /etc/cron.allow 文件存在,所有在 cron.deny 中列出的用户都被禁止使用 cron

3)/var/spool/cron/——用户 cron 任务的配置文件存放目录

由用户自行设置(使用 crontab 命令)的 cron 计划任务将被保存到目录/var/spool/cron/ 中,文件名与用户名相同。

2、使用 crontab 命令管理用户的计划任务

1)crontab 命令

crontab命令的常用选项:

  • -e:编辑计划任务列表。
  • -u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
  • -l:列表显示计划任务。
  • -r:删除计划任务列表。
2)编辑用户的计划任务列表
[[email protected] ~]# crontab -e
42 4 1 * * /root/txt.sh
50 3 2 1 * /root/run.sh
0 0 */5 * * /usr/bin/rm -rf /var/opt/1.txt
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/ntpdate ntp1.aliyum.com
格式为:分 时 日 月 周  执行的脚本或命令

除了“*”以外,还可以使用“-”(减号)、“,”(逗号)、“/”(斜杠)与数字构成表达式来表  示较复杂的时间关系。
减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1、2、3、4。
逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。
斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天。