Linux的定时任务crontab

  1. 打开终端并以超级用户(root)身份登录。
  2. 输入以下命令以编辑 crontab 文件:sudo crontab -e

    sudo crontab -e

    在大多数 Linux 发行版中,只有 root 用户或具有 sudo 权限的用户才能编辑系统范围的 crontab 文件。这是因为 crontab 文件通常位于系统目录中,并且对其进行编辑可能会影响系统的运行和安全。

    如果你希望编辑系统范围的 crontab 文件(即对所有用户有效),需要使用 root 用户或具有 sudo 权限的用户来执行 crontab -e

    但是,对于普通用户来说,通常也有一个用户级别的 crontab 文件,只对该用户有效。普通用户可以使用 crontab -e 命令来编辑自己的 crontab 文件,而不需要 root 权限。

    总结来说,如果你要编辑系统范围的 crontab 文件,需要使用 root 或具有 sudo 权限的用户执行 crontab -e。如果你要编辑用户级别的 crontab 文件,可以作为普通用户执行 crontab -e

     

  3. 如果是第一次编辑 crontab 文件,系统会要求选择默认的编辑器。选择你熟悉的编辑器,比如 vim 或 nano,并按照提示进行选择。

  4. 在编辑器中,每一行代表一个定时任务。每行的格式如下:

    # 每小时的0分、15分、30分、45分执行一次
    0,15,30,45 * * * * /opt/dns_health_check.sh >> /opt/dns_health_check.log 2>&1
    # 也可以等效表示为如下
    */15 * * * * /opt/dns_health_check.sh >> /opt/dns_health_check.log 2>&1
    ~
    ~
    ~
    "/tmp/crontab.iHFLL5" 3L, 103C

    在 crontab 中,用于指定定时任务执行时间的字段是由五个星号组成的,格式为 * * * * *。每个星号代表一个时间单位,依次表示分钟、小时、日期、月份和星期几。

    这里是一些常见的表述方式:

    1. 指定具体的数值:

      • *:匹配任意值。例如,* * * * * 匹配每分钟执行一次。
      • 5:匹配指定的数值。例如,5 * * * * 匹配每小时的第5分钟执行一次。
    2. 指定多个数值:

      • 1,3,5:匹配指定的多个数值。例如,1,3,5 * * * * 匹配每小时的第1、第3和第5分钟执行一次。
      • 1-5:匹配一个范围内的数值。例如,1-5 * * * * 匹配每小时的第1至第5分钟执行一次。
    3. 指定时间间隔:

      • */5:匹配每个指定间隔的数值。例如,*/5 * * * * 匹配每隔5分钟执行一次。
      • 0-59/5:匹配在指定范围内的每个指定间隔的数值。例如,0-59/5 * * * * 匹配每隔5分钟执行一次。
    4. 指定列表和通配符的组合:

      • 1,3,*/10:匹配指定的数值和每个指定间隔的数值。例如,1,3,*/10 * * * * 匹配第1、第3分钟,以及每隔10分钟执行一次。

    需要注意的是,不同的时间单位具有不同的取值范围,如分钟范围为 0-59,小时范围为 0-23,日期范围为 1-31,月份范围为 1-12,星期范围为 0-7(其中0和7都代表星期日)。具体的使用方式可以根据实际需求进行组合和调整。

    这些表述方式可以灵活地用于定制定时任务的执行时间。根据具体的需求,结合适当的表述方式来设置合适的时间规则。

最后:

  1. 编辑现有的定时任务: 修改或者删除已存在的定时任务。在编辑界面中,找到您想要修改的定时任务,然后进行相应的更改。

  2. 保存更改并退出编辑界面: 在编辑界面中,使用适当的快捷键保存更改并退出。

  3. 检查定时任务是否生效: 编辑完成后,系统会自动重新加载 crontab,您可以使用 crontab -l 命令检查当前的定时任务列表,确认您的更改已生效。

  4. 要删除当前用户的定时任务列表:可以使用命令:crontab -r或者crontab -e重新编辑

 

附:DNS自动检测脚本


#!/bin/bash

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

# 检查 BIND 服务状态是否为active,若不是则重启
if ! systemctl is-active --quiet named.service; then
    echo -e "\033[1;33m$Mark BIND 服务未运行或出现错误,正在尝试重启。\033[0m"
    sudo systemctl restart named
    echo "www.sina.com的解析为:$(dig www.sina.com +short)"
    exit 1
fi

# 检查 DNS 解析
domains=("www.baidu.com" "www.qq.com" "www.sina.com")

for domain in "${domains[@]}"; do
    dns_query=$(dig "$domain" +short)
    if [ -z "$dns_query" ]; then
        echo -e "\033[1;33m$Mark DNS解析域名${domain}异常!\033[0m"
		echo "执行 DNS 重启操作..."
		sudo rndc reload
		echo "执行 DNS 缓存清理操作..."
		sudo rndc flush
		echo "DNS 服务已重启。"
		exit 1
    else
		echo "$Mark DNS 解析正常。"
		echo "${domain}的域名解析为:$(dig ${domain} +short)"
	fi
done

 

posted @ 2023-06-06 11:54  Magiclala  阅读(1145)  评论(0编辑  收藏  举报