Crontab定时任务管理

Crontab定时任务管理

1、检查是否有crontab命令

[root@node1 /root]
$rpm -qa |grep cronie  ##crontab使用的软件包是cronie,进程名字是crond
cronie-1.4.11-23.el7.x86_64
cronie-anacron-1.4.11-23.el7.x86_64

2、部分配置文件含义

目录含义
crontab定时任务管理的命令
/var/spool/cron/用户的定时任务的配置文件的目录
/var/log/cron定时任务日志
/etc/crontab不推荐使用这个,系统定时任务的配置文件
/etc/cron.hourly/系统 定时任务,每小时运行
/etc/cron.daily/系统定时任务,每天运行
/etc/cron.weekly/系统定时任务,每周运行
/etc/cron.monthly/系统定时任务,每个月运行

3、配置命令的使用

选项含义相当于
crontab -eedit编辑当前用户的定时任务vi /var/spool/cron/root #root当前用户的名字
crontab -llist查看当前用户的定时任务cat /var/spool/cron/root #root当前用户的名字
  • 初次使用定时任务的警告
$crontab -l
no crontab for root  #root用户未设置定时任务

$crontab -e
no crontab for root - using an empty one   #用户未设置定时任务,创建个新的

4、定时任务的书写格式

image-20221229175655190

* * * * *
第一个代表分钟0-59    #表示整点的时候,未说明分钟的时候,我们要指定的分钟,一般是00
第二个代表小时0-23
第三个代表日期1-31
第四个代表月份1-12
第五个代表周几0-6   #0/7代表周日


#例子
每周周六半夜十二点重启
* 00 * * 6 reboot     #代表的意思是每周周六晚上12点的0-59分钟,每分钟都重启
00 00 * * 6 reboot    #代表的意思是每周周六晚上12点整重启

5、定时任务的部分特殊符号

符号说明案例
/每隔xxx时间2 * * * * 每2分钟
00 2 * * * 每2个小时
-表示范围00 08-22 * * * 08-22点的每个小时运行
00 08-22/3 * * * 08-22点的每3小时运行
,表示独立时间(没规律)00 08,11,14,17,20 * * *
*每,全部/所有(没说具体时间)* 在分钟的位置上表示00-59,每分钟的意思
* 在小时位置上表00-23,每小时的意思.
#例子
00 07-23/2 * * * reboot    #每天在早7到晚11每隔两个小时重启一次

00 20,00-07 * * * reboot    #每天晚8点和12点到7点的整点重启

6、经典案例

  • 每两分钟同步一次系统时间
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com
  • 每天定时备份/etc到/backup下
#使用脚本方式
tar zcf /backup/etc-`date +%F_%w`.tar.gz /etc/    #编辑压缩脚本
00 00 * * * /bin/sh /server/scripts/backup-etc.sh   #部署定时任务

7、脚本与变量

  • 赋值与取值
  • 例子
time=`date +%F_%w`
echo $time

注意:系统会把time的结果写入到内存里,所以每次输出的$变量是固定的,除非重新定义一下

vim crontab.sh
time=`date +%F_%w`
echo $time
当把变量写入脚本中,每次执行脚本输出的$结果都不一样,因为每次执行脚本都会从新定义time变量
  • 使用脚本写定时任务
#!/bin/bash

lujing=/backup
time=`date +%F-%H-%M-%S`
tar -zcf $lujing/etc-$time.tar.gz /etc/   #脚本内容

*/1 * * * * /bin/sh /servers/scripts/backup-etc.sh  #定时任务语句

8、定时任务失败的推断过程

  • 如果没有日志产出,检查crond服务没有运行,rsyslog服务没有运行
  • 没有结果,手动运行对应的命令或脚本
  • 调试脚本: sh -x 或bash -x 显示脚本执行过程 (有+的表述过程,没有+表述输出,加号越多表示优先级越高)

9、定时任务的注意事项

9.1 增加注释

增加注释用于说明定时任务的作用

9.2 尽量使用脚本

sh -x 或bash -x 显示脚本执行过程 (有+的表示过程,没有+表示输出,加号越多表示优先级越高)

9.3 定时任务的文件,命令和脚本使用绝对路径

`书写定时任务的时候,相关文件要使用绝对路径`
/server/scripts/backup-etc.sh    #否则会找不到文件

`在前面运行的命令,也要使用绝对路径或定义环境变量
  • 关于命令路径的故障案例

现象: 命令行执行命令或脚本是成功的,交到了定时任务中执行,提示命令找不到

原因: 定时任务运行脚本的时候或命令的时候,只能识别/bin和/usr/bin目录下面的命令.其他的命令无法识别

解决方案:

1、使用命令的绝对路径

2、重新定义PATH或者重新加载PATH环境变量

  • export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin #重新定义环境变量(环境变量可用echo $PATH查找)
  • source /etc/profile #重新加载环境变量

定时任务识别的命令的路径:PATH linux环境变量,存放命令的位置,linux会在PATH路径中查找,如果有则执行,如果没有提示command not found/ no such file or directory

9.4 定时任务定向到空或追加到文件

现象:

邮件服务开启: 不断收到邮箱 You have new mail in /var/spool/mail/root

邮件服务关闭: 一些邮件的临时目录不断堆积小文件. /var/spool/postfix/maildrop

原因: 定时任务运行命令或脚本的时候,命令或脚本有输出,定时任务就会通过邮件形式发送给root

解决: 定时任务中命令或脚本定向到空或追加到文件

#定向到空
2 * * * * /sbin/ntpdate ntp1.aliyun.com  >/dev/null  2>&1    #同步时间

#追加到文件
* * * * * echo oldboy /tmp/lidao.txt  2>&1

9.5 定时任务直接书写的时候%有特殊含义

%代表回车

去掉特殊含义需要使用\

如果使用脚本,就没有这个问题了

10、crontab使用案例

10.1 定时备份/etc/目录到/backup以ip地址命名的目录中

  • 书写思路
    • 取出ip存放变量
    • 取出时间存放到变量
    • 创建以ip命名目录
    • 打包压缩存放到这个ip地址命名的目录中,压缩包加上时间
    • 书写定时任务
  • 代码
lujing=/backup
ip=`hostname -I | awk '{print $1}'`
time=`date +%F-%H-%M-%S`
mkdir -p $lujing/$ip
tar -zcf $lujing/$ip/etc-$time.tar.gz /etc/

10.2 定时系统巡检(定时输出系统基本信息)写入 到/tmp/sys.log中

#脚本

#!/bin/bash
source /etc/profile


hostname=hostname 
ip=`hostname -I |awk '{print $1}'`
#负载信息
average1=`w|awk -F "[ ,]" 'NR==1{print $(NF-4)}'` 
average5=`w|awk -F "[ ,]" 'NR==1{print $(NF-2)}'` 
average15=`w|awk -F "[ ,]" 'NR==1{print $NF}'` 

echo "###########################################"
echo "##################基本信息#################"
echo "主机名:$hostname   ip:$ip"
echo "##################负载信息#################"
echo "最近一分钟负载:$average1"
echo "最近五分钟负载:$average5"
echo "最近十五分钟负载:$average15"
echo "###########################################"
echo "##################内存信息#################"

#内存信息
total=`free |awk 'NR==2{print $2}'`
used=`free |awk 'NR==2{print $3}'`
bili=`free |awk 'NR==2{print ($3+$6)/$2*100"%"}'`

echo "总计内存:$total"
echo "使用内存:$used"
echo "内存使用率:$bili"
echo "###########################################"
echo "##################磁盘信息#################"

#磁盘信息
disk_total=`fdisk -l|grep '/dev/sd[a-z][:]'|wc -l`
root_size=`df -h|awk 'NR==6{print $2}'`
root_size_shiyonglv=`df -h|awk 'NR==6{print $5}'`
echo "几块硬盘:$disk_total"
echo "/分区大小:$root_size"
echo "/分区使用率:$root_size_shiyonglv"
echo "###########################################"
echo "##################进程信息#################"

#进程信息
proc_total=`top -bn1|awk 'NR==2{print $2}'`
proc_running=`top -bn1|awk 'NR==2{print $4}'`
proc_stoped=`top -bn1|awk 'NR==2{print $8}'`
proc_zombie=`top -bn1|awk 'NR==2{print $10}'`

echo "进程总数:$proc_total"
echo "运行的进程:$proc_running"
echo "挂起进程:$proc_stoped"
echo "僵尸进程:$proc_zombie"
echo "###########################################"

运行结果
###########################################
##################基本信息#################
主机名:hostname   ip:10.0.0.110
##################负载信息#################
最近一分钟负载:0.00
最近五分钟负载:0.01
最近十五分钟负载:0.05
###########################################
##################内存信息#################
总计内存:1863004
使用内存:237380
内存使用率:96.3841%
###########################################
##################磁盘信息#################
几块硬盘:4
/分区大小:27G
/分区使用率:22%
###########################################
##################进程信息#################
进程总数:103
运行的进程:1
挂起进程:0
僵尸进程:0
###########################################
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值