使用cron来定时执行脚本的步骤

发布时间 2023-08-02 16:17:35作者: brad1208

创建一个脚本,比如:/opt/port_stats.sh,脚本内容:


#!/bin/bash

# 设置要监控的端口列表
ports=({80,8080,456})

# 执行一次循环
for port in "${ports[@]}"; do
  num=$(netstat -nat | grep ":"$port | wc -l)
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $port $num" >> /opt/output.log
done

 

打开终端或命令行界面。

输入以下命令来编辑 crontab 文件:
crontab -e

在 crontab 文件中添加以下一行,以使脚本每隔一分钟自动执行一次:
* * * * * /bin/bash /opt/port_stats.sh
保存文件并退出文本编辑器。

确保脚本 port_stats.sh 具有可执行权限:
chmod +x /opt/port_stats.sh

重启 cron 服务以使更改生效(在某些系统中可以使用 cronie 替代 cron):
sudo systemctl restart cron

这些步骤会将你的脚本配置为每隔一分钟自动执行一次,并将结果写入 /opt/output.log 文件中。


【设置开机执行该任务】

创建一个新的服务单元文件,比如 port_stats.service,并将以下内容粘贴进去:

[Unit]
Description=Run port_stats.sh every minute at startup

[Service]
Type=simple
ExecStart=/bin/bash /opt/port_stats.sh

[Install]
WantedBy=default.target

这会在系统开机时执行你的脚本 /opt/port_stats.sh。

将这个文件保存到 /etc/systemd/system/ 目录中。
运行以下命令启用并启动这个服务:

sudo systemctl enable port_stats.service
sudo systemctl start port_stats.service

这将启用服务并在系统开机时自动执行定时任务。


【日志拆分】
可以使用 logrotate 工具来自动拆分日志文件,以防止日志文件过大。logrotate 是一个用于管理日志文件的系统工具,它可以按照一定的条件和规则自动进行日志文件的轮转和拆分。

以下是如何设置 logrotate 来处理你的 output.log 文件:

创建一个新的配置文件,比如 port_stats_logrotate.conf,并将以下内容粘贴进去:
/opt/output.log {
    size 10M #当日志文件达到 10 兆大小时触发拆分
    rotate 10 #最多保留 10 个旧的日志文件
    compress #压缩旧的日志文件
    missingok #如果日志文件不存在,则忽略错误
    notifempty #如果日志文件为空,则忽略错误
    create 644 root root #创建新的日志文件时使用指定的权限和所有者
}


/opt/output.log {
    size 10M #当日志文件达到 10 兆大小时触发拆分
    rotate 10  #最多保留 10 个旧的日志文件
    compress
    missingok #如果日志文件不存在,则忽略错误
    notifempty #如果日志文件为空,则忽略错误
    create 644 root root #创建新的日志文件时使用指定的权限和所有者
    olddir /opt/archive
    postrotate
        mv /opt/output.log.1 /opt/output.log.1.log
    endscript
}


这个配置文件指定了以下内容:
size 10M:当日志文件达到 10 兆大小时触发拆分。
rotate 10:最多保留 10 个旧的日志文件。
compress:压缩旧的日志文件。
missingok:如果日志文件不存在,则忽略错误。
notifempty:如果日志文件为空,则忽略错误。
create 644 root root:创建新的日志文件时使用指定的权限和所有者。
将这个配置文件保存到 /etc/logrotate.d/ 目录中。

运行以下命令来手动执行一次 logrotate:
sudo logrotate -f /etc/logrotate.d/port_stats_logrotate.conf

这将立即执行一次日志轮转,并拆分 output.log 文件。

之后,每当 output.log 文件达到 10 兆大小时,logrotate 将自动执行日志轮转,拆分日志文件并保留指定数量的旧日志文件。