at
命令:使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。
# 安装at
yum install at -y
# 开启atd服务
systemctl enable --now atd
对于其他用户
,是否执行某个命令或脚本取决于/etc/at.allow
# at命令:时间
# at>要运行的命令
[root@localhost ~]# at 11:32
at> ls
at> reboot
# 写完后CTrl+D 退出
at命令示例:
# 在22年6月8日上午10点执行slocate -u命令
at 10:00 6/8/22
at> socate -u
敲回车
# 显示用户待执行任务列表
[root@localhost ~]# atq
2 Fri Nov 5 08:08:00 2021 a root
# 查看任务
[root@localhost ~]# at -l
3 Sun Aug 15 11:36:00 2021 a root
# 查看指定编号的计划任务
## at -l 如果查看处有多条计划任务的话,用at -c 编号,即可查看信息
at -c 1
# 取消计划任务 atrm 编号
atrm 1
# -r 清除作业--可能不兼容该命令
## -m 作业完成后给用户发邮件
at -rm 作业id
# 查看计划任务是否已经删除
at -l
at now + 1 min
> useradd tgb
# 写完后CTrl+D 退出
Linux下的任务调度分为两类,系统任务调度
和用户任务调度
。
corn运行机制:
cron
会搜索 /var/spool/cron
目录,寻找以 /etc/passwd
文件中的用户名命名
的crontab文件
,然后将crontab文件
装入内存;cron
还将搜索/etc/crontab
文件,这个文件(cron时间表)
是以特定格式写成的cron启动以后,先检查是否有用户设置了crontab文件,如果没有就转入睡眠状态,释放系统资源;所以该后台进程占用资源极少,之后每分钟被换醒一次,查看当前是否有需要运行的命令。
系统任务调度
系统任务调度
: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
在/etc/crontab
文件,这个就是系统任务调度
的配置文件
。
cron
系统调度进程可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。
# 系统级别的crontab会记录在该文件下
cat /etc/crontab
/etc/crontab
文件包括下面几行:
# 前四行是用来配置crond任务运行的环境变量
## SHELL变量指定了系统要使用哪个shell,这里是bash
SHELL=/bin/bash
## PATH变量指定了系统执行命令的路径
PATH=/sbin:/bin:/usr/sbin:/usr/bin
## MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
MAILTO=""
## HOME变量指定了在执行命令或者脚本时使用的主目录
HOME=/
# 任务部分
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
用户任务调度
:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
用户
可以使用crontab
工具来定制自己的计划任务。
在crontab文件
都被保存在/var/spool/cron
目录中。其文件名
与用户名一致
。
# 该文件中所列用户不允许使用crontab命令
/etc/cron.deny
# 该文件中所列用户允许使用crontab命令
/etc/cron.allow
# 所有用户crontab文件存放的目录,以用户名命名
/var/spool/cron/
参考: https://blog.51cto.com/u_15175006/2720985
# yum安装crontab
yum install -y crontab
# 开机自启crond服务并现在启动
systemctl enable --now crond
https://wangchujiang.com/linux-command/c/crontab.html
# 编辑该用户的计时器设置
crontab -e
# 列出该用户的计时器设置;
crontab -l
# 删除该用户的计时器设置;
crontab -r <用户名称>
# 指定要设定计时器的用户名称。
crontab -u <用户名称>
字段 | 描述 |
---|---|
minute | 分钟(0 – 59) |
hour | 小时(0 – 23) |
day-of-month | 一个月的第几天(1 – 31) |
month-of-year | 一年的第几个月(1 – 12) |
day-of-week | 一周的星期几(0 – 6),0 代表周日 |
commands | 需要执行的命令 |
# 每周一上午 8:00 执行命令
00 08 * * 1 commands
参数 | 描述 |
---|---|
* | 代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作 |
/ | 可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。 |
- | 可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” |
, | 可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” |
# 配置计划任务
crontab -e
# 配置规则
分 时 日 月 星期 (绝对路径)命令
# 示例 11:57 执行reboot
## &>/dev/null 禁止发邮件
57 11 * * * /usr/sbin/reboot &>/dev/null
# 查看计划任务
crontab -l
示例
# 例:晚上11点到早上8点之间每两个小时,在/tmp/test.txt文件中加入sleepy文本
* 23-8/2 * * * echo"sleepy" >> /tmp/test.txt
# 指定用户创建计划任务
## -e 编辑crontab文件
## -u 用户名
crontab -e -u natasha
# 查看用户创建计划任务
## -u 用户名
## -l 列出crontab文件中的内容
crontab -u natasha -l
/var/log/cron
目录记录了Linux下所有用户
的计划任务信息
,以crontab -u -e
方式写入的计划任务都会在此目录下生成文件
# 查看计划任务
cat /var/log/cron
# 查看所有用户的计划任务
cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}
## -r 删除crontab文件
# 查看系统计划任务日志
tail --f /var/log/cron
# 使用关键字过滤计划任务日志
grep "alidata" /var/log/cron
计划任务每执行一次,就会发送一封邮件给管理员。
# 发送邮件给指定用户
MAILTO="raj"
&>/dev/null
# 示例 11:57 执行reboot
## &>/dev/null 禁止发邮件
57 11 * * * /usr/sbin/reboot &>/dev/null
## 5个*表示每分钟执行一次
## &>/dev/null表示禁止发邮件
* * * * * rsync -av --delete 10.0.0.8:/data/www/ /data/backup &>/dev/null
MAILTO=""
# 在任务的第一行指定邮件地址为空即可
MAILTO=""
# 清空收件箱
cat /dev/null > /var/spool/mail/root
计划任务格式在线生成
https://crontab.guru/
# 配置示例--2点半,3点半,4点半执行任务
## 2点30分执行一次任务
## 3点30分执行一次任务
## 4点30分执行一次任务
30 2-4 * * * 命令
# 分钟间隔段执行命令
## 2点15分执行一次计划任务
## 2点30分执行一次计划任务
## 2点50分执行一次计划任务
15,30,50 2 * * * 命令
# 指定星期6的2:15,2:30,2:50执行计划任务
15,30,50 2 * * 6 命令
*/表示每隔多长时间执行任务
参考: https://www.runoob.com/w3cnote/linux-crontab-tasks.html
# 每间隔两小时的30分时执行一次计划任务 */2
## 分 时 日 月 星期 (绝对路径)命令
30 */2 * * * 命令
# 每间隔2分钟执行一次任务
## 分 时 日 月 星期 (绝对路径)命令
*/2 * * * * 命令
# 每周日23点0分自动清理日志
0 23 * * */0 echo " " > /alidata/tunnel.log
# 5个*表示每分钟执行
## &>/dev/null表示禁止发邮件
* * * * * rsync -av 10.0.0.8:/data/www /data/backip &>/dev/null
延时任务
:
flok锁
: