首先在添加定时计划之前我们需要知道一个命令crontab

Linux crontab 是 Linux 系统中用于设置周期性被执行的指令的命令。

当安装完成操作系统之后,默认便会启动此任务调度命令。

crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

Linux 任务调度的工作主要分为以下两类:

  • 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  • 2、个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

语法

1
crontab -l

编辑当前用户的 crontab 文件:

1
crontab -e
1
crontab -r
1
crontab -u username -l
1
crontab -u username -e

格式

当你敲下crontab -e时会弹出一个类似于vim的界面让你去申明执行的时间和执行文件的位置

crontab的语法格式为

1
f1 f2 f3 f4 f5 program

如果你想一个脚本每年/每月/每周执行,可以用*来代替数字

案例

假设我想整一个自检脚本并且每天执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash

# 定义日志文件路径
LOG_FILE="/var/log/daily_health_check.log"


# 获取当前日期和时间
DATE=$(date "+%Y-%m-%d %H:%M:%S")

# 清空或创建日志文件(可选:保留历史日志可改为追加模式)
# echo "Daily Health Check Report - $DATE" > $LOG_FILE

# 追加日志(推荐)
echo "=== Daily Health Check Report - $DATE ===" >> $LOG_FILE

# 1. 检查磁盘空间使用情况
echo "=== Disk Space Check ===" >> $LOG_FILE
df -h | grep -v "tmpfs" >> $LOG_FILE # 排除 tmpfs

# 2. 检查内存使用情况
echo -e "\n=== Memory Usage Check ===" >> $LOG_FILE
free -h >> $LOG_FILE

# 3. 检查 CPU 负载(1分钟平均负载)
echo -e "\n=== CPU Load Check ===" >> $LOG_FILE
uptime >> $LOG_FILE

# 4. 检查系统运行时间
echo -e "\n=== System Uptime ===" >> $LOG_FILE
uptime -p >> $LOG_FILE

# 5. 检查关键服务状态(示例:SSH、Nginx)
echo -e "\n=== Service Status Check ===" >> $LOG_FILE
systemctl is-active sshd >> $LOG_FILE
systemctl is-active nginx >> $LOG_FILE # 如果没有 Nginx,请替换或删除此行

# 6. 检查最近登录用户(可选)
echo -e "\n=== Recent Logins ===" >> $LOG_FILE
last -n 5 >> $LOG_FILE # 显示最近5条登录记录

# 结束日志
echo -e "\n=== Check Completed ===\n" >> $LOG_FILE

# 可选:发送邮件通知(需配置邮件服务)
# echo "Daily health check completed. See $LOG_FILE for details." | mail -s "Daily Health Check" admin@example.com

然后我再敲一个crontab -e,并编辑如下内容,写完保存

用crontab -l查看是否添加成功