一、周期性计划任务-crontab
1、命令简介
按照预先设置的时间周期重复执行用户指定的命令操作;执行此命令需要运行守护进程:crond,但是现在系统一般都是自动运行的。
主要配置文件
全局配置文件:/etc/crontab
系统默认的设置:/rtc/cron.*/
用户定义的设置:/var/spool/cron/用户
其中全局配置文件内容看一下:/etc/crontab
、命令格式
3、命令选项crontab
编辑周期性任务
-e:编辑周期性任务;打开vi编辑器,最好加上绝对路径
-l:查看周期性任务
修改周期性任务
-e:打开vi编辑器进行删除操作
-r:删除当前用户所有的任务;慎用!
超级用户root可以通过命令管理其他用户
-u 用户名 -e
-u 用户名 -l
-u 用户名 -r
4、实例
每月10日10点复制/etc/hostname 到opt目录下,并查看任务
首先查询cp的绝对路径
crontab -e
crontab -l
每三天的16点复制文件:0 16 *3/ * * /usr/bin/cp -p/erc/hostname /opt
0 0 1 * *:每天12点(0代表12点)
50 7 * * * :每天7点50
0 * */5 * * :每隔5天的每个整点
crontad -u zhangsan -e:通过用户zhangsan创建任务计划
二、一次性计划任务
1、at命令简介
at命令允许指定Linux系统何时运行脚本,at命令会将作业提交到队列中,指定shell在何时运行该作业。at的守护进程atd会以后台模式运行,检查作业队列来运行作业。atd守护进程会检查系统上的一个特殊目录来获取at命令的提交的作业。默认情况下,atd守护进程每60秒检查一次目录。有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
2、at命令格式
在使用at命令的时候,一定要保证atd进程启动
at [ HH:MM] [yyyy-mm-dd] //创建一次性任务;若在任务内创建系统已存在的文件,会更改文件的创建时间为当前
ctrl+d //结束at命令的输入
atq:查询一次性任务:查询没有完成的任务,完成时间之前
atrm id号:删除一次性的任务
/var/spool/at/:计划任务的存储目录
/var/spool/mail:到执行任务时间时,不会显示在前台进行,系统会发送一个邮件mail,进入存储目录查询
3、时间设置
at允许使用一套相当复杂的指定时间的方法
at now +2min:2分钟之后执行创建的任务
at teatime:默认代表当天下午四点执行任务
at teatime +3day:代表三天后的下午四点执行任务
at noon:默认代表当天中午12点
at May 30 2021:2021年5月30日执行任务
at 3pm:下午三点执行任务
4、实例
2天后晚上8点拷贝网卡配置文件到/op目录下,3天后中午12点再把拷贝的文件
/etc/sysconfig/network- scripts/ifcfg- ens33 //网卡配置文件
[root@localhost ~]$at 8pm +2day
at> cp -p /etc/sysconfig/network-scripts/ifcfg-ens33 /opt/ens33.bak
at> <EOT>
job 11 at Sat May 15 20:00:00 2021
[root@localhost ~]$at noon +3day
at> cp -p /opt/ens33.bak /etc/sysconfig/network-scripts/ifcfg-ens33
at> <EOT>
job 12 at Sun May 16 12:00:00 2021
三、计划任务crontab执行.sh脚本
实验步骤如下,结合实例说明
新建一个目录(可以是你当前的项目,如果.sh脚本执行结果和你项目相关的话。如果是系统本身相关的,建议放在其他位置)
cd /opt
在新建的目录下创建一个hell.sh文件内容:echo “hello world”
vim hello.sh
echo “hello world”
- 运行脚本文件的两种方法
sh hello.sh【hello.sh可以没有x权限】
使用绝对路径运行脚本文件:/opt/hello.sh【需要赋予执行权限】
赋予文件属主执行权限:执行chmod u+x hello.sh;
/opt/hello.sh 就变成一个命令
crontab -e:打开计划任务的列表
将内容写入计划任务表
*/1 * * * * /opt/hello.sh (需赋予可执行权限的内容)
四、计划任务crontab权限设置
crontab默认所有用户都可以执行crontab设置计划任务。若有需要可以通过在/etc/cron.deny中添加用户来禁止该用户设置计划任务,也可以自行创建/etc/cron.allow来使用白名单
黑名单cron.deny目录:/etc | grep “cron.deny”
当系统安排任务计划时
查找allow文件–>查找deny文件
若两个文件中存在同一用户,因为allow权限更高,所以还是允许该用户创建计划任务
白名单是系统默认没有的,需要自己创建cron.allow//vim cron.allow