计划任务(一次性计划任务、周期计划任务)级计划任务实验

 

一、计划任务分类

1.使用at命令调用atd进程设置在某个特定的时间,执行一次性任务

2.使用crontab命令调用crond进程,设置按固定的周期(如每天、每周等)重复执行预先计划好的任务

 

 

二、一次性计划任务设定:

前提:service atd start,用ps -ef 查看进程是否开启

 

1、一次性计划任务常用命令 

at命令

在指定的日期、时间点自动执行预先设置的一些命令操作,属于一次性计划任务

Ctrl+d保存退出

系统服务的名称:/etc/init.d/atd

设置格式:at  [HH:MM]  [yyyy-mm-dd]

at命令常用时间格式:

at  [HH:MM]  

at  [HH:MM]  [yyyy-mm-dd]

at  now +  数字 [minutes|hours|days|weeks]

 

atq命令

用途:查询当前设置的at任务列表

同at -l

 

atrm  编号

用途:删除指定任务编号的at任务

同at -d

 

at 时间 -f 文件

使用文件中的命令作为计划任务

at now + 5 minutes -f /root/test.sh

 

at -c 任务号 :查看任务的具体内容(相当于cat下某个文件)

 

at 计划任务文件位置

/var/spool/at/a开头的文件

任务执行完毕,文件消失

[root@111 ~]# date

Sat Mar 23 14:57:40 CST 2019

[root@111 ~]# ls /tmp-----------/tmp目录是空目录

[root@111 ~]# at 15:01

at> touch /tmp/at.txt-----------设定一次性计划任务,在/tmp/目录下创建at.txt文件

at> 

job 2 at 2019-03-23 15:01

[root@111 ~]# atq------------查看计划任务,刚才设定的计划任务的编号是2,2不是总的计划任务数,要分清楚

2 2019-03-23 15:01 a root

[root@111 ~]# at -c 2----------查看计划任务的内容涉及什么

#!/bin/sh

# atrun uid=0 gid=0

# mail root 0----------------以下省略许多

touch /tmp/at.txt

[root@111 ~]# cd /var/spool/at-------切换到计划任务文件位置

[root@111 at]# ls

a00002018b07e5 spool

[root@111 at]# cat a00002018b07e5------相当于at -c 2

#!/bin/sh

# atrun uid=0 gid=0

# mail root 0-----------以下省略许多

touch /tmp/at.txt

[root@111 at]# date-------时间点已经到了执行计划任务的15:01

Sat Mar 23 15:01:18 CST 2019

[root@111 at]# ls /tmp----------计划任务执行成功,at.txt文件已经创建

at.txt

[root@111 at]# ls----------计划任务执行成功,文件消失

spool

 

 

2、设定计划任务权限

 

计划任务并非每个用户都可以创建,以下两个文件设置任务的权限

/etc/at.deny:只有该名单里面的人不可以使用(默认情况下所有用户都可以添加一次性任务) 

/etc/at.allow:只有该名单里面的人可以使用


 

[root@111 ~]# ls /etc/at.deny

/etc/at.deny

[root@111 ~]# ls /etc/at.allow-------------默认情况下只有/etc/at.deny文件

ls: cannot access /etc/at.allow: No such file or directory--------并且/etc/at.deny是空文件,标志着所有用户都能设置任务

[root@111 ~]# cat /etc/at.deny

 

 

 

 

三、周期计划任务:

按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务

 

1、管理cron计划任务

服务名称:/etc/init.d/crond

用户定义的设置,位于文件:/var/spool/cron/用户名

编辑计划任务:crontab -e [-u 用户名]  

#加用户名代表为这个用户创建周期计划任务 #就是调用vim打开/var/spool/cron/下的文件

查看计划任务内容:crontab -l [-u 用户名]     #调用cat命令读取/var/spool/cron/文件内容

删除计划任务:crontab -r [-u 用户名]     删除当前用户的周期计划任务文件

   #调用rm删除/var/spool/cron/下文件,如果只想删除一个计划任务,用crontab -e打开,再去删除某行

 

注意:root用户可以管理注定用户的计划任务,普通用户只能管理自己的计划任务

 

2、cron命令含义

 

分钟 取值从0-59之间的任意整数
小时 取值从0-23之间的任意整数

 

时间数值的特殊表示方法:

*  表示该范围内的任意时间

,  表示间隔的多个不连续时间点

-  表示一个连续的时间范围

/n  指定间隔的时间频率

 

应用示例

0  17  *  *  1-5 周一到周五每天五点

30  8  *  *  1,3,5 周一、周三、周五 每天8点半

0  12  */3  *  * 每间隔三天的12点整

 

注意:

1.资源分配不均

多个计划任务同时运行

2.安全检查

防止有非法计划任务

3.周和日、月不可同时并存

容易导致计划任务时间混乱

 

 

3、crond进程配置文件的通常包含三个部分 :/etc/crontab文件

注释、环境变量、cron命令


 

[root@localhost ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin(相比较平时命令行少,因此命令不在配置文件的4个路径下就会找不到,因此需要用到绝对路径)

[root@localhost ~]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin

四、计划任务实验:

 

示例1(root用户):

每天早上7:50自动开启sshd服务,22点50时关闭

每隔5天的12点整清空一次FTP服务器公共目录/var/ftp/pub

每周六的7:30时,重新启动httpd服务

每周一、三、五的17:30时,打包备份/etc/httpd目录

[root@111 ~]# id

uid=0(root) gid=0(root) groups=0(root)

[root@111 ~]# which service

/sbin/service

[root@111 ~]# which rm

alias rm='rm -i'

/bin/rm

[root@111 ~]# which tar

/bin/tar

[root@111 ~]# crontab -e

[root@111 ~]# crontab -l

50 7 * * * service sshd start

50 22 * * * service sshd stop

0 12 */5 * * rm -rf /var/ftp/pub/*

30 7 * * 6 service httpd restart

30 17 * * 1,3,5 tar -cf /etc/httpd.tar /etc/httpd

 

示例2(jerry用户):

每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件

注意:宿主目录指的是jerry用户的家目录,家目录的表示方法都是~符号,表示的是/home/jerry

方法1、此时登录为root用户,root用户去创建jerry用户的周期任务

[root@111 ~]# id

uid=0(root) gid=0(root) groups=0(root)

[root@111 ~]# crontab -e -u jerry

[root@111 ~]# crontab -l -u jerry

55 23 * * 7 cp /etc/passwd /home/jerry/pwd.txt

方法2、也可以切换到jerry用户再去创建周期任务

[jerry@111 ~]$ id

uid=501(jerry) gid=501(jerry) groups=501(jerry)

[jerry@111 ~]$ crontab -e

[jerry@111 ~]$ crontab -l

55 23 * * 7 cp /etc/passwd /home/jerry/pwd.txt 

 

 

注意问题:在执行周期任务的时候,是将命令写到shell脚本,去执行脚本

1、计划任务source 脚本

2、给脚本加x权限,计划任务写命令时指定绝对路径

 

示例3:为root用户编写计划任务:每周2、4、6的10点到17点的每隔5分钟自动将passwd、shadow这2个重要系统文件归档到username.备份的日期和时间.tar.gz这种名称的文件里(例如:root.201202011615.tar.gz)备份文件放到/opt/目录下面,并且每成功备份一个文件就发一封邮件到root用户的邮箱,邮件内容是“username.备份的日期和时间.tar.gz  is ok”。


 

1、编写脚本3.sh

tar czf /opt/root.$(date +%Y%m%d%H%M).tar/gz /etc/passwd /etc/shadow

2、写计划任务(设定的是每分钟执行一次,便于排错)

[root@111 opt]# crontab -l

* * * * * source /opt/scripts/3.sh

[root@111 opt]# ls

rh rpm_tar_test scripts

[root@111 opt]# date

Sat Mar 23 16:38:01 CST 2019#

[root@111 opt]# ls

rh root.201903231638.tar.gz rpm_tar_test scripts

 

你可能感兴趣的:(LINUX学习)