标签搜索

Crontab【定时服务】

lilymaxyz
2024-11-12 / 0 评论 / 4 阅读 / 正在检测是否收录...

@TOC

1.服务使用流程

服务使用流程说明
部署安装这个服务或软件
配置如何使用这个服务通过配置文件,通过命令。初级使用:能用就行。提高:额外配置。
优化或注意事项安全......
排障难点
:one:学会通过错误提示解决问题
:two:学会看日志
:three:高级:让服务输出错误提示或者输出更加详细的错误提示(通过重定向)
其他:one:做好监控
:two:做好备份
:three:做好日志收集
:four:统一认证

2.部署定时任务

2.1.定时任务软件包名字:cronie , 服务名字(进程)crond

rpm -qa cronie
rpm -qi cronie
rpm -ql cronie

2.2.目录结构及说明

目录结构说明
:one:/var/spool/cron/用户的定时任务的配置文件的目录
:two:crontab定时任务管理的命令
:three:/var/log/cron定时任务日志‘
了解就行的配置文件
/etc/crontab不推荐使用这个,系统定时任务的配置文件
/etc/cron.hourly/系统定时任务,每小时运行
/etc/cron.daily/系统定时任务,每天运行
/etc/cron.weekly/系统定时任务,每周运行
/etc/cron.monthly/系统定时任务,每个月运行

2.3.检查是否运行

在这里插入图片描述

2.4.使用指南

2.4.1.配置的命令

  • crontab用于对定时任务的规则进行增删改查.
crontab选项说明
crontab -eedit编辑当前用户的定时任务vi /var/spool/cron/root #root当前用户的名字
crontab -llist查看当前用户的定时任务cat /var/spool/cron/root #root当前用户的名字
[08:45:41 root@centos7 data]# crontab -l
no crontab for root
用户未设定定时任务

[08:47:51 root@centos7 data]# crontab -e
no crontab for root - using an empty one
#用户未设置定时任务       给你创建空的
#1. crond test by dange

"/tmp/crontab.vqDK9C" 1L, 24C written
crontab: installing new crontab
#         更新了定时任务的配置。

在这里插入图片描述

2.4.2.定时任务书写格式-时间 *

在这里插入图片描述

# 每天早上8:30分 去学校(go to school)
# 1.test01
30 08 * * * go to school

# 晚上12点上床睡觉(go to bed/sleep) dbj
# 2.test02
* 00 * * * go to bed #每天的半夜12点00-59每分钟运行.
00 00 * * * go to bed #每天运行

问题:
表示整点的时候,未说明分钟的时候,我们要指定的分钟,一般是00.
关于分钟位置上是否写*说明
涉及到小时,天,周几的时候,分钟位置上记得写个数(00)
每周六半夜12点带cc去dbj
* 00 * * 06 dbj 
* 每周的半夜12点00-59,每分钟都大保健1次 (分钟1次)
0-59
00 00 * * 06 dbj 每周六的半夜12点去dbj

2.4.3.定时任务时间部分的特殊符号 *

时间部分特殊符号说明案例
/每隔xxx时间/2 每2分钟
00
/2 * 每2小时
-表示范围00 08-22 * 08-22点的每个小时运行
,表示独立时间(没规律)00 08,11,14,17,20 *
*每,全部/所有(没说具体时间) 在分钟的位置上表示00-59,每分钟的意思
在小时位置上表示00-23,每小时的意思
每天的上午7点到晚上11点 每二个小时运行CMD命令
00 07-23/2 * * * CMD
07 09 11 13 15 17 19 21 23

定时任务每天23点到第2天的7点运行.
00 23,00-07 * * *

3.定时任务案例

  • 同步时间
  • 进行备份
  • 日常循环操作
  • 巡检+发送邮件

3.1.案例01: 每2分钟同步下系统的时间

#1. 同步时间,每2分钟同步一次时间
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
tail -f /var/log/cron

在这里插入图片描述

3.2.案例02: 每天定时备份/etc/到/backup/下面:star::star::star::star::star:

3.2.1.命令

mkdir -p /backup/
tar -czf /backup/etc-`date +%F_%W`.tar.gz /etc/

在这里插入图片描述

3.2.2.脚本

# 专用脚本目录
mkdir -p /server/scripts/devops-shell
# 书写脚本
[15:02:36 root@centos7 devops-shell]# cat backup-etc.sh 
#!/bin/bash
if [ ! -d /backup/ ];then
    mkdir -p /backup/
fi
tar -czf /backup/etc-`date +%F_%T`.tar.gz /etc/

3.2.3.定时任务-时间每分钟或每2分钟(调试)

#3.backup etc by dange 2024-10-23
* * * * * sh /server/scripts/devops-shell/backup-etc.sh

3.2.4. 检查日志和结果

在这里插入图片描述

watch ls -l

在这里插入图片描述

3.2.5.定时任务-调试完成后改为指定的时间运行

#2. 定时备份 /etc/ 目录
00 00 * * * sh /server/scripts/devops-shell/backup-etc.sh

4.定时任务注意事项(箴言)

  • 命令使用绝对路径.
  • 书写的命令或脚本定向到空或追加到文件.

4.1.定时任务书写流程

  • :one:分析要求需要使用什么命令并调试
  • :two:书写脚本(命令较多,功能复杂)与调试
  • :three:书写定时任务的配置文件(绝对路径,定向到空)
  • :four:调试

4.2.增加注释

  • 书写定时任务的时候,尽量添加上一个注释.
  • 用于说明这条定时任务作用.

4.3.尽量使用脚本

  • 定时任务未来避免一些故障,推荐使用脚本.
调试脚本的方法:
sh -x 或bash -x ,显示脚本执行过程.
有+开头的表示脚本背后执行的过程.
如果开头没有+,表示输出.

4.4.定时任务的文件,脚本使用绝对路径

/server/scripts/backup-etc.sh

4.5.命令使用绝对路径

  • 定时任务中直接写命令,可以加上绝对路径
  • 定时任务中运行脚本,脚本开头可以重新设置PATH环境变量

4.6.定时任务中执行的命令或脚本定向到空或追加到文件

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

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

#3.定时备份 /etc/ 目录
00 01 * * * /bin/bash -x /server/scripts/backup-etc.sh >>/tmp/scripts.log 2>&1

5.定时任务故障案例

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

  • %回车.
  • 去掉特殊含义需要使用\
如果使用脚本,就没有这个问题了

5.2.定时任务关于命令路径的故障

  • 在定时任务运行命令或脚本的时候,只能识别到/bin或/usr/bin目录下面的命令.
  • 只要不在这些目录下面的命令,就要使用绝对路径或者重新定义下PATH环境变量.

5.2.1.故障案例

  • 故障案例:

    • 现象: 命令行执行命令或脚本是成功的,交到了定时任务中执行,提示命令找不到.
    • 原因: 定时任务运行脚本的时候或命令的时候,只能识别/bin和/usr/bin目录下面的命令.其他的命令无法识别.
    • 解决方案:

      • 🅰 简单粗暴,遇到这种命令,直接写绝对路径.
      • 🅱 治本,在脚本开头 重新定义下PATH环境变量或重新加载下PATH环境变量.
  • 定时任务识别的命令的路径:
  • PATH linux环境变量,存放命令的位置.
  • linux会在PATH路径中查找,如果有则执行.如果没有提示command not found/ no such file or directory

5.2.2.使用解决方案🅰

在这里插入图片描述

5.2.3.使用解决方案🅱 重新定义PATH

在这里插入图片描述

5.2.4.使用解决方案🅱 重新加载PATH变量

在这里插入图片描述

5.2.5.故障实例

在这里插入图片描述
在这里插入图片描述

5.3.定时任务没有定向到空或追加到文件故障案例

  • 现象:

    • 邮件服务开启: 不断收到邮箱 You have new mail in /var/spool/mail/root
    • 邮件服务关闭: 一些邮件的临时目录不断堆积小文件. /var/spool/postfix/maildrop
  • 原因:

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

    • 定时任务中命令或脚本定向到空或追加到文件.
# 定向到空
#1.同步时间
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

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

#3.定时备份 /etc/ 目录
00 01 * * * /bin/bash -x /server/scripts/backup-etc.sh >>/tmp/scripts.log 2>&1

6.定时任务使用案例

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

  • 书写脚本+变量

    • 取出ip存放变量 ✅
    • 取出时间存放到变量 ✅
    • 创建以ip命名目录 ✅
    • 打包压缩存放到这个ip地址命名的目录中,压缩包加上时间 ✅
  • 书写定时任务(每分钟)
  • 书写定时任务(改为指定时间)

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

  • 通过手动或自动方式,获取所有主机的基本信息.
  • 未来这个操作可以通过监控实现.
主机名信息(主机名)
ip地址
负载信息(0 0 0)
内存信息(内存多大,用了多少,剩余多少)
cpu信息(核心数)
磁盘信息(磁盘使用多少,剩余多少)
进程信息(一共多少进程,几个运行,几个挂起,几个僵尸)
  • 写入到/tmp/sys.log文件的格式
#################################
主机名: oldboyedu ip地址: 10.0.0.200
#################################
负载信息
最近1分钟: 0
最近5分钟: 0
最近15分钟: 0
#################################
内存信息(单位kb)
总计内存: 2000000
内存使用了多少: 200000
内存使用率: 10%
#################################
swap信息
swap总大小: 200000
swap使用大小: 0
swap使用率: 0
#################################
磁盘信息
几块硬盘: 1
根分区大小: 20G
根分区使用率: 10%
################################
进程信息
进程总数: 100
运行中进程: 2
挂起进程数量: 0
僵尸进程数量: 0
################################
[12:43:53 root@centos7 devops-shell]# cat sys_info_85_day26_v1.sh 
#!/bin/bash
#
#**********************************************************
#Author:            dange
#QQ                 123456
#Date:              2024-10-24
#FileName:          sys_info_85_day26.sh
#Version:           V1.0
#URL:               www.baidu.com
#Description:       系统巡检脚本
#Copyright (C):     2024 All rights reserved
#*********************************************************
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

#1.输出基本信息
hostname=`hostname`
ip=`hostname -I | awk '{print $1}'`

echo "#############################################"
echo "主机名:${hostname}  IP地址:${ip}"


#2.负载信息
load1=`uptime | awk -F'[ ,]+' '{print $(NF-2)}'`
load5=`uptime | awk -F'[ ,]+' '{print $(NF-1)}'`
load15=`uptime | awk -F'[ ,]+' '{print $(NF)}'`

echo "###############系统负载信息##################"
echo "系统负载信息"
echo "最近1分钟负载:${load1}"
echo "最近5分钟负载:${load5}"
echo "最近15分钟负载:${load15}"

#3.内存信息
mem_total=`free -m | awk 'NR==2{print $2}'`
mem_used=`free -m | awk 'NR==2{print $3}'`
mem_used_percent=`free -m | awk 'NR==2{print $3/$2*100"%"}'`

echo "###############内存信息(单位MB)##############"
echo "总计内存:${mem_total}MB"
echo "已用内存:${mem_used}MB"
echo "内存使用率:${mem_used_percent}"

#4.swap信息
swap_total=`free -m | awk 'NR==3{print $2}'`
swap_used=`free -m | awk 'NR==3{print $3}'`
swap_used_percent=`free -m | awk 'NR==3{print $3/$2*100"%"}'`

echo "###############内存swap信息##################"
echo "swap总大小:${swap_total}MB"
echo "swap使用大小:${swap_used}"
echo "swap使用率:${swap_used_percent}"

#5.磁盘信息
disk_count=`fdisk -l 2>/dev/null| grep '/dev/sd[a-z]:' | wc -l`
root_total_size=`df -h | awk '$NF=="/"{print $2}'`
root_used_percent=`df -h | awk '$NF=="/"{print $5}'`

echo "##################磁盘信息####################"
echo "硬盘数量:${disk_count}"
echo "根分区大小:${root_total_size}"
echo "根分区使用率:${root_used_percent}"

#6.进程信息
proc_total=`top -b -n1 | awk 'NR==2{print $2}'`
proc_running=`top -b -n1 | awk 'NR==2{print $4}'`
proc_stopped=`top -b -n1 | awk 'NR==2{print $(NF-3)}'`
proc_zombine=`top -b -n1 | awk 'NR==2{print $(NF-1)}'`

echo "##################进程信息####################"
echo "进程总数:${proc_total}"
echo "运行中的进程数:${proc_running}"
echo "挂起的进程数量:${proc_stopped}"
echo "僵尸进程数量:${proc_zombine}"
echo "#############################################"

6.3.发送邮件

6.3.1.配置发件人:163

6.3.2.获取:授权码(用户密码)

HRQPVKNACQMQOLYZ
在这里插入图片描述
在这里插入图片描述

6.3.3.linux配置/etc/mail.rc

  • 不推荐
vim /etc/mail.rc #写到最后
#未加密的发送方式通过25端口,会被公有云封掉.
cat >>/etc/mail.rc <<EOF
set from=lidao996@163.com
set smtp=smtp.163.com
set smtp-auth-user=lidao996@163.com
set smtp-auth-password=BGRCTL CZXIT
set smtp-auth=login
EOF
  • 推荐
#加密的方式465端口
cat >>/etc/mail.rc <<EOF
set nss-config-dir=/etc/pki/nssdb/
set smtp-user-starttls
set ssl-verify=ignore
set from=lida996@163.com
set smtp=smtps://smtp.163.com:465
set smtp-auth-user=lido996@163.com
set smtp-auth-password=aaaa
set smtp-auth=login
EOF
  • 详解
set from=lidao996@163.com #配置发件人
set smtp=smtp.163.com #配置使用163发送邮件 如果是加密smtps://smtp.163.com:465
set smtp-auth-user=lidao996@163.com #用户名:邮箱名字
set smtp-auth-password=BGRCTLKQDU IT #授权码
set smtp-auth=login #认证形式login

#下面3行用于配置加密方式进行传输
set nss-config-dir=/etc/pki/nssdb/
set smtp-user-starttls
set ssl-verify=ignore

6.3.4.问题

在这里插入图片描述

配置加密方式发送邮件错误: Error in certificate: Peer's certificate issuer is not recognized
  • 解决方法:在sys_info_85_day26_v1.sh 脚本后面加入
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >/etc/pki/nssdb/163.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/163.crt
certutil -L -d /etc/pki/nssdb/
#cd /etc/pki/nssdb/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i /etc/pki/nssdb/163.crt

6.3.5.发送邮件

cat /backup/result.log |mail -s "今日巡检的结果" youjiu_linux@qq.com
mail -s '巡检' youjiu_linux@qq.com

6.3.6.发送邮件带上附件

echo "巡检信息在附件" |mail -s "巡检结果" -a /backup/result.log youjiu_linux@qq.com

6.3.7.写入定时任务

  • 脚本:

    • 获取系统各种指标与信息 脚本
    • 存放到文件 命令
    • 把文件内容通过邮件发送走
脚本关系
sh /server/scripts/send-mail.sh
调用执行sh /server/scripts/sys-info.sh 脚本
上面脚本的结果写入到/backup/result.log文件中
通mail命令把result.log发送给对应的用户

6.3.8.测试定时任务

#6. 系统巡检并发送邮件
* * * * * sh /server/scripts/send-mail.sh &>/dev/null

6.4.表格

  • csv表格:通过逗号分割的内容
[15:28:44 root@centos7 devops-shell]# cat sys_info_85_day26_v2_csv.sh 
#!/bin/bash
#
#**********************************************************
#Author:            dange
#QQ                 123456
#Date:              2024-10-24
#FileName:          sys_info_85_day26.sh
#Version:           V1.0
#URL:               www.baidu.com
#Description:       系统巡检脚本
#Copyright (C):     2024 All rights reserved
#*********************************************************
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

#1.输出基本信息
hostname=`hostname`
ip=`hostname -I | awk '{print $1}'`

echo "主机名,${hostname}"
echo "IP地址,${ip}"


#2.负载信息
load1=`uptime | awk -F'[ ,]+' '{print $(NF-2)}'`
load5=`uptime | awk -F'[ ,]+' '{print $(NF-1)}'`
load15=`uptime | awk -F'[ ,]+' '{print $(NF)}'`

echo "系统负载信息,"
echo "最近1分钟负载,${load1}"
echo "最近5分钟负载,${load5}"
echo "最近15分钟负载,${load15}"

#3.内存信息
mem_total=`free -m | awk 'NR==2{print $2}'`
mem_used=`free -m | awk 'NR==2{print $3}'`
mem_used_percent=`free -m | awk 'NR==2{print $3/$2*100"%"}'`

echo "内存信息,"
echo "总计内存,${mem_total}MB"
echo "已用内存,${mem_used}MB"
echo "内存使用率,${mem_used_percent}"

#4.swap信息
swap_total=`free -m | awk 'NR==3{print $2}'`
swap_used=`free -m | awk 'NR==3{print $3}'`
swap_used_percent=`free -m | awk 'NR==3{print $3/$2*100"%"}'`

echo "swap信息,"
echo "swap总大小,${swap_total}MB"
echo "swap使用大小,${swap_used}"
echo "swap使用率,${swap_used_percent}"

#5.磁盘信息
disk_count=`fdisk -l 2>/dev/null| grep '/dev/sd[a-z]:' | wc -l`
root_total_size=`df -h | awk '$NF=="/"{print $2}'`
root_used_percent=`df -h | awk '$NF=="/"{print $5}'`

echo "磁盘信息,"
echo "硬盘数量,${disk_count}"
echo "根分区大小,${root_total_size}"
echo "根分区使用率,${root_used_percent}"

#6.进程信息
proc_total=`top -b -n1 | awk 'NR==2{print $2}'`
proc_running=`top -b -n1 | awk 'NR==2{print $4}'`
proc_stopped=`top -b -n1 | awk 'NR==2{print $(NF-3)}'`
proc_zombine=`top -b -n1 | awk 'NR==2{print $(NF-1)}'`

echo "进程信息,"
echo "进程总数,${proc_total}"
echo "运行中的进程数,${proc_running}"
echo "挂起的进程数量,${proc_stopped}"
echo "僵尸进程数量,${proc_zombine}"
bash sys_info_85_day26_v2_csv.sh >result-linux.txt

iconv -f utf8 -t gbk result-linux.txt -o result-linux.csv

在这里插入图片描述
在这里插入图片描述

endl

0

评论

博主关闭了所有页面的评论