计划任务之crontab和at

计划任务:①一次性计划任务 ②长期性计划任务

一、使用at添加、查看、删除一次性计划任务

[root@michael ~]# at 23:50
at> systemctl restart httpd
at> <EOT> 此处请同时按下Ctrl+d来结束编写计划任务
job 2 at 2020-06-25 23:50

[root@michael ~]# at -l
2	2020-06-25 23:50 a root
[root@michael ~]#  echo "systemctl restart httpd" | at 23:50
job 3 at 2020-06-25 23:50

[root@michael ~]# at -l
2	2020-06-25 23:50 a root
3	2020-06-25 23:50 a root
[root@michael ~]# atrm 2
[root@michael ~]# at -l
3	2020-06-25 23:50 a root

二、使用crontab

linux的定时任务服务crond (crontab)服务。
crond 服务默认情况(每分钟)会检查系统中是否有需要执行的定时任务,如果有,就会根据事先定义好的规则来执行这个定时任务。


crond 是一个定时任务守护进程。
crontab 是用户用来设置定时任务规则的命令。


[root@localhost ~]# chkconfig --list | grep crond
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@localhost ~]# chkconfig --list atd
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off

为什么需要定时任务?
服务器:7*小时提供服务。
重要数据:1天备份一次,5份以上。
服务器上的数据一般最低1天备份一次,每分钟(实时备份)增量备份。半夜备份(每天半夜起床备份,备份一次5小时,呵呵呵)。

秒级任务:
1)crond自身无能为力。
2)自己写守护进程shell循环。
3)Quartz也可实现秒级任务。

#!/bin/bash
# miao.sh 每5秒执行一次echo
while true
do
	echo "你好世界!"  >> /tmp/self.log
	sleep 5
done

[root@localhost ~]# vim miao.sh
[root@localhost ~]# sh miao.sh &
[1] 2113
[root@localhost ~]# ps -ef | grep miao
root 2113 1995 89 01:23 pts/0 00:00:11 sh miao.sh
root 2115 1995 0 01:23 pts/0 00:00:00 grep miao

[root@localhost ~]# /etc/init.d/sshd status
openssh-daemon (pid  1753) is running...

[root@localhost ~]# netstat -lntup | grep ssh
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1753/sshd           
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      1991/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1753/sshd           
tcp        0      0 ::1:6010                    :::*                        LISTEN      1991/sshd

常用方法
▪ 创建crontab文件
格式:“分 时 日 月 星期 命令”,如果某些字段没有设置,则需要使用 * 来占位, 多个时间段用逗号 “,” 分割。

星期 命令
33 13 26 11 * commond
字段 作用
取值为 0~59 的整数
取值为 0~23 的整数
取值为 1~31 的整数
取值为 1~12 的整数
星期 取值为 0~7 的任意整数,其中 0,7 均为星期日
命令 要执行的命令或脚本

-l 列出crontab文件内容(重要)
-e 编辑crontab文件内容(重要)
-r 删除crontab文件内容
-i 提示确认
-u 指定使用的用户执行任务,编辑他人的计划任务.

[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
使用crontab -e编辑,实际上编辑了`/var/spool/cron/用户名` 的一个文件内容
[root@localhost ~]# cat /var/spool/cron/root 
# test

注:
[root@localhost ~]# crontab -e === vim //var/spool/cron/root
[root@localhost ~]# crontab -l === cat //var/spool/cron/root

使用者权限及定时任务文件

文件 说明
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny
/var/spool/cron/xxx 所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名。

[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
# 这是第一个crond测试: 每周二、四、六的凌晨3点15分,将目录/home/michael进行打包压缩处理
15 3 * * 2,4,6 /usr/bin/tar -czvf backup.tar.gz /home/michael

注:

逗号( , )表示多个时间段(例“8,9,12”表示8月、9月和12月)。
减号( - )表示一段连续的时间周期(例字段“日”的取值为“12-15”,则表示每月的12~15日)。
除号( / )表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。

在crond服务中每行命令语句是一条完整计划任务。
所有命令一定要用绝对路径的方式书写。(whereis rm)


[root@localhost ~]# yum install crontabs
[root@localhost ~]# service crond start
[root@localhost ~]# service crond restart


注:

在crond服务的配置中,可以#号开头写上注释信息,如:功能介绍、需求介绍、作者等重要信息。

计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。

猜你喜欢

转载自blog.csdn.net/Michael_lcf/article/details/103226112
今日推荐