当前位置: 首页 > article >正文

day022-定时任务-故障案例与发送邮件

文章目录

  • 1. cron定时任务无法识别命令
    • 1.1 故障原因
    • 1.2 解决方法
      • 1.2.1 对命令使用绝对路径
      • 1.2.2 在脚本开头定义PATH
  • 2. 发送邮件
    • 2.1 安装软件
    • 2.2 配置邮件信息
    • 2.3 巡检脚本与邮件发送
      • 2.3.1 巡检脚本内容
      • 2.3.2 制作时任务发送邮件
  • 3. 调取API发送邮件
    • 3.1 编写文案脚本
    • 3.2 制作定时任务
  • 4. ubuntu使用mail
  • 5. 踩坑记录
    • 1. /bin和/usr/bin的关系?
    • 2. 去除前面空格
    • 3. 为什么 `crontab -e` 不继承用户 Shell 的 `PATH`?
    • 4. 虚拟机经常进入紧急模式
    • 5. 脚本中awk的参数被识别为变量
  • 6. 思维导图

1. cron定时任务无法识别命令

1.1 故障原因

  • PATH变量定义的位置(全局配置文件):/etc/environment
[root@oldboy99-Kylin ~]# cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
  • cron的PATH变量不继承用户的PATH
  • cron的PATH变量,可以通过定时任务查看:
# 查看cron的PATH
* * * * * echo PATH:$PATH >>/var/log/path.log 2>&1
#################################################
cron的PATH变量:/usr/bin:/bin

  • 可以看到cron的PATH缺少/sbin,因此有些命令运行不了

1.2 解决方法

1.2.1 对命令使用绝对路径

  • 不推荐,命令较少时可以这样做

1.2.2 在脚本开头定义PATH

  • export PATH=/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  • source /etc/profile,推荐使用

2. 发送邮件

  • 系统:麒麟/红帽

2.1 安装软件

  • yum install -y mailx sendmail

2.2 配置邮件信息

  • mail命令的配置文件:/etc/mail.rc

发件人信息:

  • 使用163邮箱
  • 邮箱:skx2554798585@163.com
  • 授权码:CPVZ6355KsCtEUik
  • 邮件服务端地址:smtp.163.com

将发件人信息写入mail配置文件中:

vim /etc/mail.rc #写到最后cat >>/etc/mail.rc <<EOFset from=skx2554798585@163.comset smtp=smtp.163.comset smtp-auth-user=skx2554798585@163.comset smtp-auth-password=CPVZ6355KsCtEUikset smtp-auth=loginEOF

2.3 巡检脚本与邮件发送

2.3.1 巡检脚本内容

[root@oldboy99-Kylin /server/scripts]# cat check_system_mail.sh
#!/bin/bash
#desc:系统巡检脚本
source /etc/profile#基本信息
#1.vars 变量部分
hostname=`hostname`
ip=`hostname -I`
os=`hostnamectl |grep 'Operating System'|awk -F ': +' '{print $2}'`
kernel=`hostnamectl |grep 'Kernel' |awk -F ': +' '{print $2}'`
total=`top -bn1 |awk -F ': +| ' 'NR==2{print $2}'`
zom=`top -bn1 |awk 'NR==2{print $(NF-1)}'`
cpu=`uname -m`
result_dir="/tmp/result.txt"
title="`date +%F`-系统巡检结果"
mail="skx2554798585@qq.com"#2.使用
cat >${result_dir}<< EOF
====主机基本信息====
主机名:$hostname
ip:$ip
系统版本:$os
内核版本:$kernel
CPU架构:$cpu
====主机进程信息====
进程总数:$total
僵尸进程数量:$zom
EOF#3.发送邮件
cat $result_dir |mail -s $title $mail

2.3.2 制作时任务发送邮件

# 巡检结果,发送邮件
0 8 * * * /bin/bash /server/scripts/check_system_mail.sh >/dev/null 2>&1

3. 调取API发送邮件

  • API网址:[天聚数行TianAPI - 应用开发者API数据调用平台](https://www.tianapi.com/)
[root@oldboy99-Kylin /server/scripts]#  curl -X POST \
>  -H "Content-Type:application/x-www-form-urlencoded" \
>  -d "key=045a8a29190663ed52c2ee82f22d739d" \
>  "https://apis.tianapi.com/pyqwenan/index"
{"code":200,"msg":"success","result":{"content":"在所有的道别里,我最喜欢明天见。","source":"佚名"}}

3.1 编写文案脚本

#!/bin/bash
#desc:朋友圈文案
#author:孙克旭source /etc/profile# vars
url='curl -s -X POST  -H "Content-Type:application/x-www-form-urlencoded"  -d "key=045a8a29190663ed52c2ee82f22d739d"  "https://apis.tianapi.com/pyqwenan/index"'
title="`date +%F`-pyq"
mail="skx2554798585@qq.com"# 发送邮件
$url |awk -F '"' '{print $(NF-5)}' |mail -s $title $mail

3.2 制作定时任务

# 发送朋友圈文案
0 8 * * * /bin/bash /server/scripts/copywriting.sh >/dev/null 2>&1

4. ubuntu使用mail

  • 下载的软件包是:s-nail,其他与kylin相同
apt update 
apt install -y s-nail
vim /etc/s-nail.rc 
# 编写的发件人信息与kylin相同
s-nail -s "系统信息" skx2554798585@qq.com </etc/hostname

5. 踩坑记录

1. /bin和/usr/bin的关系?

在这里插入图片描述

  • 简直是怪事

  • 其实/bin和/bin/是不一样的

  • 这是因为加了斜杠 /bin/ls 会自动解析符号链接并显示目标(即 /usr/bin)的属性。

  • 关键区别

    • ls -ld /bin → 显示链接本身属性(lrwxrwxrwx)。
    • ls -ld /bin/ → 显示链接指向的目标属性(dr-xr-xr-x)。

2. 去除前面空格

[root@oldboy99-Kylin ~]# lscpu |grep '型号名称' |awk -F ':' '{print $2}'Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz
[root@oldboy99-Kylin ~]# lscpu |grep '型号名称' |awk -F ':' '{print $2}' |xargs 
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz
  • xargs 不接任何命令时,它仅做空白清理和行合并,不会尝试将输入传递给其他命令。

3. 为什么 crontab -e 不继承用户 Shell 的 PATH

安全性与隔离性:cron 任务在非交互式、非登录 Shell 中运行,不会加载 ~/.bashrc~/.profile 等配置文件。

最小化原则:避免因用户环境变量差异导致任务执行异常。

4. 虚拟机经常进入紧急模式

在这里插入图片描述

在这里插入图片描述

  • 这两个硬盘名称一直更换

  • 解决方法:在/etc/fstab文件中用UUID定义分区
  • 难点在于在紧急模式中复制UUID
[root@oldboy99-Ubuntu ~]# blkid |grep sda1 |awk -F '"' '{print $2}' 
d32fb407-77bf-434c-aa7c-c794a581e08e
# 可以直接追加到文件中
blkid |grep sda1 |awk -F '"' '{print $2}' >> /etc/fstab
  • 编辑磁盘管理文件时,用v选择区域,d剪切,p粘贴

在这里插入图片描述

5. 脚本中awk的参数被识别为变量

[root@oldboy99-Kylin /server/scripts]# bash copywriting.sh
copywriting.sh:行13: NF-5:未找到命令

脚本中命令为:$url |awk -F '"' "{print $(NF-5)}" |mail -s $title $mail

  • $(NF-5)被双引号包裹,因此$(NF-5)被认为是变量
  • 将双引号改为单引号(直接被识别为字符串)即可:$url |awk -F '"' '{print $(NF-5)}' |mail -s $title $mail

6. 思维导图

【金山文档 | WPS云文档】 思维导图 https://kdocs.cn/l/co3I7PtpTYQX

相关文章:

day022-定时任务-故障案例与发送邮件

文章目录 1. cron定时任务无法识别命令1.1 故障原因1.2 解决方法1.2.1 对命令使用绝对路径1.2.2 在脚本开头定义PATH 2. 发送邮件2.1 安装软件2.2 配置邮件信息2.3 巡检脚本与邮件发送2.3.1 巡检脚本内容2.3.2 制作时任务发送邮件 3. 调取API发送邮件3.1 编写文案脚本3.2 制作定…...

新增 git submodule 子模块

文章目录 1、基本语法2、添加子模块后的操作3、拉取带有submodule的仓库 git submodule add 是 Git 中用于将另一个 Git 仓库作为子模块添加到当前项目中的命令。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录&#xff0c;同时保持它们各自的提交历史独立。 1、基…...

List优雅分组

一、前言 最近小永哥发现&#xff0c;在开发过程中&#xff0c;经常会遇到需要对list进行分组&#xff0c;就是假如有一个RecordTest对象集合&#xff0c;RecordTest对象都有一个type的属性&#xff0c;需要将这个集合按type属性进行分组&#xff0c;转换为一个以type为key&…...

Linux 使用 Docker 安装 Milvus的两种方式

一、使用 Docker Compose 运行 Milvus (Linux) 安装并启动 Milvus Milvus 在 Milvus 资源库中提供了 Docker Compose 配置文件。要使用 Docker Compose 安装 Milvus&#xff0c;只需运行 wget https://github.com/milvus-io/milvus/releases/download/v2.5.10/milvus-standa…...

AR眼镜+AI视频盒子+视频监控联网平台:消防救援的智能革命

在火灾现场&#xff0c;每一秒都关乎生死。传统消防救援方式面临信息滞后、指挥盲区、环境复杂等挑战。今天&#xff0c;一套融合AR智能眼镜AI视频分析盒子智能监控管理平台的"三位一体"解决方案&#xff0c;正在彻底改变消防救援的作业模式&#xff0c;为消防员装上…...

编程技能:字符串函数10,strchr

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;字符串函数09&#xff0c;strncmp 回到目录…...

使用tunasync部署企业内部开源软件镜像站-Centos Stream 9

使用tunasync部署企业内部开源软件镜像站 tunasync 是清华大学 TUNA 镜像源目前使用的镜像方案&#xff0c;本文将介绍如何使用 tunasync 部署企业内部开源软件镜像站。 基于tunasync mirror-web nginx进行镜像站点搭建。 1. tunasync设计 tunasync架构如下&#xff1a; …...

c/c++的opencv像素级操作二值化

图像级操作&#xff1a;使用 C/C 进行二值化 在数字图像处理中&#xff0c;图像级操作 (Image-Level Operations) 是指直接在图像的像素级别上进行处理&#xff0c;以改变图像的视觉特性或提取有用信息。这些操作通常不依赖于图像的全局结构&#xff0c;而是关注每个像素及其邻…...

C++----Vector的模拟实现

上一节讲了string的模拟实现&#xff0c;string的出现时间比vector靠前&#xff0c;所以一些函数给的也比较冗余&#xff0c;而后来的vector、list等在此基础上做了优化。这节讲一讲vector的模拟实现&#xff0c;vector与模板具有联系&#xff0c;而string的底层就是vector的一…...

Mac redis下载和安装

目录 1、官网&#xff1a;https://redis.io/ 2、滑到最底下 3、下载资源 4、安装&#xff1a; 5、输入 sudo make test 进行编译测试 会提示 ​编辑 6、sudo make install 继续 7、输入 src/redis-server 启动服务器 8、输入 src/redis-cli 启动测试端 1、官网&#xff…...

[25-cv-05718]BSF律所代理潮流品牌KAWS公仔(商标+版权)

潮流品牌KAWS公仔 案件号&#xff1a;25-cv-05718 立案时间&#xff1a;2025年5月21日 原告&#xff1a;KAWS, INC. 代理律所&#xff1a;Boies Schiller Flexner LLP 原告介绍 原告是一家由美国街头艺术家Brian Donnelly创立的公司&#xff0c;成立于2002年2月25日&…...

【PhysUnits】9 取负重载(negation.rs)

一、源码 这段代码是类型级二进制数&#xff08;包括正数和负数&#xff09;的取反和取负操作。它使用了类型系统来表示二进制数&#xff0c;并通过特质&#xff08;trait&#xff09;和泛型来实现递归操作。 use super::basic::{B0, B1, Z0, N1}; use core::ops::Neg;// 反…...

深度思考、弹性实施,业务流程自动化的实践指南

随着市场环境愈发复杂化&#xff0c;各类型企业的业务步伐为了跟得上市场节奏也逐步变得紧张&#xff0c;似乎只有保持极强的竞争力、削减成本、提升抗压能力才能在市场洪流中博得一席之位。此刻企业需要制定更明智的解决方案&#xff0c;以更快、更准确地优化决策流程。与简单…...

UWB:litepoint获取txquality里面的NRMSE

在使用litepoint测试UWB,获取txquality里面的NRMSE时,网页端可以正常获取NRMSE。但是通过SCPI 命令来获取NRMSE一直出错。 NRMSE数据类型和pyvisa问题: 参考了user guide,发现NRMSE的数值是ARBITRARY_BLOCK FLOAT,非string。 pyvisa无法解析会返回错误。 查询了各种办法…...

VUE npm ERR! code ERESOLVE, npm ERR! ERESOLVE could not resolve, 错误有效解决

VUE &#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve 错误有效解决 npm install 安装组件的时候出现以上问题&#xff0c;npm版本问题报错解决方法&#xff1a;用上述方法安装完成之后又出现其他的问题 npm install 安装组件的时候出现以上问题&…...

IoT/HCIP实验-1/物联网开发平台实验Part1(快速入门,MQTT.fx对接IoTDA)

文章目录 实验介绍设备接入IoTDA进入IoTDA平台什么是IoTDA 开通服务创建产品和设备定义产品模型&#xff08;Profile&#xff09;设备注册简思(实例-产品-设备) 模拟.与平台通信虚拟设备/MQTT.fx应用 Web 控制台QA用户或密码错误QA证书导致的连接失败设备与平台连接成功 上报数…...

DMA STM32H7 Domains and space distrubution

DMA这个数据搬运工&#xff0c;对谁都好&#xff0c;任劳任怨&#xff0c;接受雇主设备的数据搬运业务。每天都忙碌着&#xff01;哈哈哈。 1. DMA 不可能单独工作&#xff0c;必须接收其他雇主的业务&#xff0c;所以数据搬运业务的参与者是DMA本身和业务需求发起者。 2. 一…...

洪水危险性评价与风险防控全攻略:从HEC-RAS数值模拟到ArcGIS水文分析,一键式自动化工具实战,助力防洪减灾与应急管理

&#x1f50d; 洪水淹没危险性是洪水损失评估、风险评估及洪水应急和管理规划等工作的重要基础。当前&#xff0c;我国正在开展的自然灾害风险普查工作&#xff0c;对洪水灾害给予了重点关注&#xff0c;提出了对洪水灾害危险性及风险评估的明确要求。洪水危险性及风险评估通常…...

Gemini Pro 2.5 输出

好的&#xff0c;我已经按照您的要求&#xff0c;将顶部横幅提示消息修改为右下角的 Toast 样式通知。 以下是涉及更改的文件及其内容&#xff1a; 1. my/src/html-ui.js 移除了旧的 #message-area div。在 <body> 底部添加了新的 #toast-container div 用于存放 Toas…...

SQL Server 和 MySQL 对比

下面是 SQL Server 和 MySQL 的详细对比&#xff0c;从功能、性能、成本、生态等多个维度展开&#xff0c;帮助你判断在什么情况下该选择哪一个。 ✅ 总览对比表 维度SQL ServerMySQL开发公司微软&#xff08;Microsoft&#xff09;Oracle&#xff08;2008年起&#xff09;是否…...

Leetcode 3269. 构建两个递增数组

1.题目基本信息 1.1.题目描述 给定两个只包含 0 和 1 的整数数组 nums1 和 nums2&#xff0c;你的任务是执行下面操作后使数组 nums1 和 nums2 中 最大 可达数字 尽可能小。 将每个 0 替换为正偶数&#xff0c;将每个 1 替换为正奇数。在替换后&#xff0c;两个数组都应该 递…...

三轴云台之积分分离PID控制算法篇

一、核心原理 积分分离PID控制的核心在于动态调整积分项的作用&#xff0c;以解决传统PID在三轴云台应用中的超调、振荡问题&#xff1a; 大误差阶段&#xff08;如云台启动或快速调整时&#xff09;&#xff1a; 关闭积分项&#xff0c;仅使用比例&#xff08;P&#xff09;…...

【Elasticsearch】scripted_upsert

在 Elasticsearch 中&#xff0c;scripted_upsert 是一个用于更新操作的参数&#xff0c;它允许在文档不存在时通过脚本初始化文档内容&#xff0c;而不是直接使用 upsert 部分的内容。这种方式提供了更灵活的文档创建和更新逻辑。 scripted_upsert 的工作原理 当设置 scripte…...

uv - 一个现代化的项目+环境管理工具

参考&#xff1a; 【uv】Python迄今最好的项目管理环境管理工具&#xff08;吧&#xff1f;&#xff09;_哔哩哔哩_bilibili 项目需求 想象&#xff0c;每次创建一个项目的时候&#xff0c;我们需要去写 README. md, .git 仓库, .gitignore&#xff0c;你会感觉很头大 对于 …...

经典密码学和现代密码学的结构及其主要区别(2)维吉尼亚密码—附py代码

Vigenre cipher 维吉尼亚密码 维吉尼亚密码由布莱斯德维吉尼亚在 16 世纪发明&#xff0c;是凯撒密码的一个更复杂的扩展。它是一种多字母替换密码&#xff0c;使用一个关键字来确定明文中不同字母的多个移位值。 与凯撒密码不同&#xff0c;凯撒密码对所有字母都有固定的偏移…...

Elasticsearch 节点角色详解及协调节点请求策略

引言 Elasticsearch 集群中的节点可以承担多种角色&#xff0c;如主节点、数据节点、预处理节点和协调节点。合理配置和理解这些节点角色&#xff0c;对于保障集群的高可用性、性能优化以及请求调度至关重要。本文将深入解析各类节点的职责与配置方式&#xff0c;并介绍如何通…...

视频逐帧提取图片的工具

软件功能&#xff1a;可以将视频逐帧提取图片&#xff0c;可以设置每秒提取多少帧&#xff0c;选择提取图片质量测试环境&#xff1a;Windows 10软件设置&#xff1a;由于软件需要通过FFmpeg提取图片&#xff0c;运行软件前请先设置FFmpeg&#xff0c;具体步骤 1. 请将…...

数据结构第1章编程基础 (竟成)

第 1 章 编程基础 1.1 前言 因为数据结构的代码大多采用 C 语言进行描述。而且&#xff0c;408 考试每年都有一道分值为 13 - 15 的编程题&#xff0c;要求使用 C/C 语言编写代码。所以&#xff0c;本书专门用一章来介绍 408 考试所需的 C/C 基础知识。有基础的考生可以快速浏览…...

互联网大厂Java求职面试:AI大模型与云原生架构融合中的挑战

互联网大厂Java求职面试&#xff1a;AI大模型与云原生架构融合中的挑战 在互联网大厂的Java求职面试中&#xff0c;面试官往往以技术总监的身份&#xff0c;针对候选人对AI、大模型应用集成、云原生和低代码等新兴技术的理解与实践能力进行考察。以下是一个典型的面试场景&…...

msql的乐观锁和幂等性问题解决方案

目录 1、介绍 2、乐观锁 2.1、核心思想 2.2、实现方式 1. 使用 version 字段&#xff08;推荐&#xff09; 2. 使用 timestamp 字段 2.3、如何处理冲突 2.4、乐观锁局限性 3、幂等性 3.1、什么是幂等性 3.2、乐观锁与幂等性的关系 1. 乐观锁如何辅助幂等性&#xf…...