Linux定时发送dokcer容器状态(钉钉机器人)

首先要检查 cron 是否正在运行,可以执行以下步骤:

  1. 查看 cron 服务的状态。运行以下命令:

     sudo systemctl status cron 或 sudo systemctl status crond

    如果 cron 服务正在运行,你将看到类似以下内容的输出:

     ● cron.service - Regular background program processing daemon
          Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
          Active: active (running) since Mon 2021-09-20 10:00:00 UTC; 5h ago
            Docs: man:cron(8)
        Main PID: 1234 (cron)
           Tasks: 1 (limit: 1234)
          Memory: 123.0K
             CPU: 5s
          CGroup: /system.slice/cron.service
                  └─1234 /usr/sbin/cron -f
    //或
    
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2023-09-15 15:48:16 CST; 2 days ago
     Main PID: 434 (crond)
        Tasks: 1
       Memory: 1.5M
       CGroup: /system.slice/crond.service
               └─434 /usr/sbin/crond -n

    如果 cron 服务处于运行状态(Active: active (running)),则表示 cron 已启动。

  2. 检查正在运行的 cron 任务。运行以下命令:

    crontab -l

    这将显示当前用户的 cron 定时任务列表。如果列表中存在定时任务,则表示 cron 正在运行。

如果 cron 服务处于运行状态且存在定时任务,那么 cron 已成功启动并正在按计划执行任务。

提示Unit cron.service could not be found.

如果你在运行 systemctl status cron 命令时收到 "Unit cron.service could not be found" 的提示,这意味着你的 Linux 系统可能没有安装 cron 服务。

不同的 Linux 发行版使用不同的任务调度服务,如 cron systemd。在某些系统上,特别是较新的发行版中,cron 服务可能已被替代或使用 systemd 计时器来执行定时任务。

在这种情况下,你可以尝试以下方法:

  1. 检查 systemd 计时器:运行以下命令来查看是否存在与 cron 相关的 systemd 计时器:

     systemctl list-timers

    这将列出所有正在运行的 systemd 计时器,包括可能替代 cron 的任务。

  2. 安装 cron 服务:如果你确定你需要使用传统的 cron 服务,你可以尝试安装它。根据你的 Linux 发行版,可以使用以下命令安装 cron

    • 对于 Debian/Ubuntu 系统:

       sudo apt-get install cron
    • 对于 CentOS/RHEL 系统:

       sudo yum install cronie
    • 对于 Arch Linux 系统:

       sudo pacman -S cronie

    安装完成后,你可以尝试启动 cron 服务并重新运行 systemctl status cron 命令来检查其状态。

根据你的系统配置和发行版,可能需要使用不同的方法来安排定时任务。请参考你的操作系统文档或相关的文档资源以获取更准确的信息和指导。

要在 Linux 中使用 sh 命令定时执行脚本,你可以使用以下方法:

要在 Linux 中使用 sh 命令定时执行脚本,你可以使用以下方法:

  1. 使用 cron 任务:cron 是一个定时任务调度器,可以在指定的时间间隔内运行脚本。你可以编辑 crontab 文件来配置 cron 任务。

    • 运行以下命令编辑 crontab 文件:

       crontab -e
    • 在打开的编辑器中,添加一个新的行,指定脚本的执行时间和要运行的命令。例如,以下行将每天的上午 8 点运行脚本 /path/to/script.sh

       0 8 * * * /bin/sh /path/to/script.sh
    • 保存并关闭文件。

    cron 任务会根据你的指定时间自动运行脚本。

  2. 使用 at 命令:at 命令允许你在指定的时间运行一次性任务。你可以使用 at 命令来安排脚本的执行时间。

    • 运行以下命令来安排任务:

       at <time> -f /path/to/script.sh

      其中 <time> 是你希望脚本执行的时间。例如,at now + 1 hour 表示脚本将在当前时间的一小时后执行。

    • 输入 Ctrl + D 来保存并提交任务。

    脚本将在指定的时间执行一次。

选择适合你需求的方法,并根据需要来安排脚本的定时执行。请注意,cron at 命令的语法和配置可能会因操作系统的不同而有所差异。如果需要更详细的信息,请参考你使用的操作系统的文档或 cron、at 命令的手册页。

监控状态脚本

获取服务状态最后的容器id

 # 获取巡检时间
 time=$(date "+%Y-%m-%d %H:%M:%S")
 ​
 # 获取主机名称
 hostname=$(hostname)
 ​
 # 获取主机 IP 地址
 ip=$(hostname -I)
 ​
 # 获取 CPU 使用率
 cpu=$(top -bn1 | grep load | awk '{printf "%.2f%%\n", $(NF-2)}')
 ​
 # 获取内存使用率
 mem=$(free | awk '/Mem/{printf "%.2f%%\n", $3/$2*100}')
 ​
 # 获取硬盘使用率
 disk=$(df -h | awk '$NF=="/"{printf "%s\n", $5}')
 ​
 # 获取 MySQL 服务状态
 mysql_status=$(docker inspect --format='{{.State.Status}}' 47e0e8fbda84)
 ​
 # 获取 Nginx 服务状态
 nginx_status=$(docker inspect --format='{{.State.Status}}' e8626849389f)
 ​
 ​
 # 发送巡检结果给叮叮机器人
 curl -H "Content-Type: application/json" -X POST -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"巡检时间:$time\n主机名:$hostname\nIP地址:$ip\nCPU使用率:$cpu\n内存使用率:$mem\n硬盘使用率:$disk\nMySQL服务状态:$mysql_status\nHalo服务状态:$halo_status\nNginx服务状态:$nginx_status\"}}" https://oapi.dingtalk.com/robot/send?access_token=自己的机器人Token