crontab 定时任务的使用

crond命令定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。

linux任务调度的工作主要分为以下两类:

系统执行的工作:系统周期性所要执行的工作,如更新whatis数据库  updatedb数据库,日志定期切割,收集系统状态信息,/tmp定期清理

启动crond服务

# systemctl start crond

# systemctl enable crond

cron命令参数介绍:

crontab的参数:

crontab -u hr       #指定hr用户的cron服务

crontab -l          #列出当前用户下的cron服务的详细内容

crontab -u mk -l   #列出指定用户mk下的cron服务的详细内容

crontab -r   #删除cron服务

crontab -e   #编辑cron服务

例如:

crontab -u root -l     # root查看自己的cron计划任务

crontab -u san -r      # root想删除san的cron计划任务

cron -e 编辑时的语法

图片1.png

星期日用0或7表示

一行对应一个任务,特殊符号的含义:     

*

代表取值范围内的数字

(任意/每)

/

指定时间的间隔频率

*/10   0-23/2

-

代表从某个数字到某个数字

8-17 

分开几个离散的数字

6,10-13,20

L

可以是每月最后一天或者每周最后一天

5L,表示最后一个周五(5表示周五,L表示最后)

#

表示第几个的意思

6#3,表示当月第3个星期六(6表示周六,3表示第3个)

/ 步长。能除尽则执行。例如 5/15,代表从5开始,以15为步长。因此,当5/15位于分钟的位置时,表示小时内的第5、20、35和50分钟。

L 最后一天。可以是每月最后一天或者每周最后一天。如果用在 天(周)字段,并且前面加数字,则表示最后一个周N。例如5L,表示最后一个周五(5表示周五,L表示最后)。

W 工作日,指周一到周五的任意一天

# 表示第几个的意思,例如 6#3,表示当月第3个星期六(6表示周六,3表示第3个)

创建计划任务

例1:每天凌晨2点1分开始备份数据

# crontab -e   #添加计划任务

1 2 * * *  tar zcvf /opt/grub2.tar.gz  /boot/grub2

# crontab  -l    #查看

例2:黑客:以非root用户添加计划任务。  最好使用已经存在系统用户添加。这里使用bin用户来添加

[root@xuegod63 ~]# crontab -u bin -e

1 * * * * echo "aaaaaaa"  >> /tmp/bin.txt

排查:

[root@xuegod63 ~]# crontab  -u bin -l

1 * * * * echo "aaaaaaa"  >> /tmp/bin.txt

互动:如何排查所有用户的计划任务?  不会:1   有思路:6

做黑客要有一个很扎实的基础,还要有很好的思维

注:所有用户的计划任务,都会在/var/spool/cron/下产生对应的文件

[root@xuegod63 ~]# ll /var/spool/cron/

total 8

-rw------- 1 root root 42 Nov 12 10:11 bin

-rw------- 1 root root 19 Nov 12 10:06 root

所以后期可以使用这一招排查,黑客是否在你的机器中安装了定时任务

系统级别的计划任务

/etc/crontab    这个是系统任务调度的配置文件

# vim /etc/crontab

SHELL=/bin/bash    #指定操作系统使用哪个shell

PATH=/sbin:/bin:/usr/sbin:/usr/bin     #系统执行命令的搜索路径

MAILTO=root   #将执行任务的信息通过邮件发送给xx用户

# 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

也可以直接在/etc/crontab中添加计划任务

使用crontab命令的注意事项:环境变量的问题

清理你的邮件日志 ,比如使用重定向 >/dev/null  2>&1

 [root@xuegod63 bin]# ls /etc/cron   #按两下tab键

cron.d/       cron.deny     cron.monthly/ cron.weekly/

cron.daily/   cron.hourly/  crontab  

注: cron.d/       #是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面。

cron.deny     #控制用户是否能做计划任务的文件;

cron.monthly/  #每月执行的脚本;

cron.weekly/   #每周执行的脚本;

cron.daily/     #每天执行的脚本;

cron.hourly/   #每小时执行的脚本;

crontab       #主配置文件 也可添加任务;

实战-常见的计划任务写法和案例

常见写法:

每天晚上21:00 重启apache

0 21 * * * /etc/init.d/httpd  restart

每月1、10、22日的4 : 45重启apache。

45 4 1,10,22 * *  /etc/init.d/httpd  restart

每月1到10日的4 : 45重启apache。

45 4 1-10 * *   /etc/init.d/httpd  restart

每隔两天的上午8点到11点的第3和第15分钟重启apach

3,15 8-11 */2 * *  /etc/init.d/httpd  restart

晚上11点到早上7点之间,每隔一小时重启apach

0 23-7/1 * * * /etc/init.d/apach restart

周一到周五每天晚上 21:15 寄一封信给 root@panda:

15 21 * * 1-5  mail -s "hi" root@panda < /etc/fstab

互动:crontab不支持每秒。 每2秒执行一次脚本,怎么写?

在脚本的死循环中,添加命令 sleep 2 ,执行30次自动退出,然后添加,计划任务:

* * * * *  /back.sh

案例要求:

每天2:00备份/etc/目录到/tmp/backup下面

将备份命令写入一个脚本中

每天备份文件名要求格式: 2017-08-19_etc.tar.gz

在执行计划任务时,不要输出任务信息

存放备份内容的目录要求只保留三天的数据

====================================================

mkdir -p /tmp/backup || cd /tmp/backup

tar zcf `date +%F`_etc.tar.gz  /etc

find /tmp/backup -name “*.tar.gz” -mtime +3 -exec rm -rf {}\;

============================================================

# crontab -l

13 21 * * * echo "xuegod1707" > /tmp/a.txt

0 22 * * * /root/backup.sh  & > /dev/null

# cat backup.sh

#!/bin/bash

find /tmp/backup -name "*.tar.gz" -mtime +3 -exec rm -f {}\;

#另一种写法

#find /tmp/backup -name "*.tar.gz" -mtime +3 | xargs rm -f

tar zcf /tmp/backup/`date +%F`_etc.tar.gz /etc

注:工作中备份的文件不要放到/tmp,因为过一段时间,系统会清空备/tmp目录

版权声明:
作者:WaterBear
链接:https://l-t.top/1491.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录