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

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

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

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

[root@localhost ~]# atrm 2	//删除第 2 条 at 计划任务

[root@localhost ~]# atq	//确认第 2 条任务已被删除

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

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

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

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

1)/etc/crontab——系统任务配置文件
  • /etc/crontab 文件中设置的是维护 Linux 操作系统所需的任务,Linux 操作系统及相关程序在安装时可自动设置,不建议用户手动修改此文件。
[root@localhost ~]# 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)编辑用户的计划任务列表
[root@localhost ~]# 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 天。

猜你喜欢

转载自blog.csdn.net/wulimingde/article/details/109460999