Linux中计划任务管理(croutab、at)
计划任务管理
一、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 天。
上一篇: DOM和BOM-day24-个人学习笔记
下一篇: 内存泄漏调试(2)——VLD