【Linux】 cron 定时任务工具详解

小破孩
2022-07-14 / 0 评论 / 328 阅读 / 正在检测是否收录...

一、cron 概述

cron 是 Linux 系统下的定时执行工具,用于按预设时间自动运行脚本或命令。

  • 用户权限:除根用户外,普通用户也可通过 crontab 工具配置个人 cron 任务。
  • 配置文件存放:所有用户定义的 crontab 任务保存在 /var/spool/cron 目录中,以用户名命名(如 /var/spool/cron/username),并以创建者身份执行。
  • 工作机制:cron 守护进程每分钟会检查 /etc/crontab 文件、/etc/cron.d/ 目录及 /var/spool/cron 目录的变化,若有更新会自动载入内存,无需重启守护进程。

二、crontab 安装与服务管理

1. 安装 crontab

yum install crontabs  # 适用于 CentOS/RHEL 系统

2. 服务控制命令

/sbin/service crond start    # 启动服务
/sbin/service crond stop     # 关闭服务
/sbin/service crond restart  # 重启服务
/sbin/service crond reload   # 重新载入配置(修改任务后无需重启服务,执行此命令生效)

3. 服务状态查看

service crond status  # 查看 crontab 服务运行状态

4. 开机自启动配置

# 设置 crond 服务在运行级别 3 和 5 下开机自启
chkconfig --level 35 crond on

# 验证开机自启设置(可选)
ntsysv  # 打开服务配置界面,检查 crond 是否被勾选

三、crontab 基本使用

1. 编辑用户定时任务

crontab -e  # 编辑当前用户的 cron 任务(首次使用会提示选择编辑器,如 vim、nano)

编辑完成后保存,任务会自动写入 /var/spool/cron/用户名 文件。

2. 常用参数说明

  • -e:编辑当前用户的定时任务
  • -l:列出当前用户的所有定时任务
  • -r:删除当前用户的所有定时任务
  • -u <用户名>:指定用户(仅 root 可用),如 crontab -u john -e 编辑 john 的任务

3. 执行 PHP 脚本的两种方式

(1)直接执行本地 PHP 脚本

示例:每小时执行一次 /home/john/myscript.php

crontab -e  # 编辑任务,添加以下内容
00 * * * * /usr/local/bin/php /home/john/myscript.php  # 分钟 小时 日 月 星期 命令

(2)通过 URL 触发(需依赖浏览器或工具)

  • 使用 lynx 文本浏览器(每小时访问 URL 执行脚本):

    00 * * * * lynx -dump http://www.example.com/myscript.php  # -dump 输出到标准输出
  • 使用 curl(每 5 分钟访问 URL,输出到临时文件):

    */5 * * * * /usr/bin/curl -o temp.txt http://www.example.com/myscript.php  # -o 指定输出文件
  • 使用 wget(每 10 分钟访问 URL,安静模式输出到临时文件):

    */10 * * * * /usr/bin/wget -q -O temp.txt http://www.example.com/myscript.php  # -q 安静模式,-O 指定输出文件

四、crontab 任务格式详解

基本格式

分钟  小时  日  月  星期  命令
*     *     *   *   *      *

字段含义

  • 分钟:1~59(* 表示每分钟,*/n 表示每 n 分钟)
  • 小时:1~23(0 表示 0 点)
  • :1~31
  • :1~12
  • 星期:0~6(0 表示星期天)
  • 命令:要执行的脚本或命令(需写绝对路径,如 /usr/local/bin/php

特殊符号含义

  • *:匹配范围内的所有值(如小时字段为 * 表示每小时)
  • /:表示“每”(如分钟字段 */10 表示每 10 分钟)
  • -:表示范围(如小时字段 18-23 表示 18 点到 23 点)
  • ,:表示离散值(如日字段 1,10,22 表示 1 日、10 日、22 日)

五、crontab 任务示例

# 每晚 21:30 重启 lighttpd
30 21 * * * /usr/local/etc/rc.d/lighttpd restart

# 每月 1、10、22 日的 4:45 重启 lighttpd
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

# 每周六、周日的 1:10 重启 lighttpd
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

# 每天 18:00 至 23:00 之间,每隔 30 分钟重启 lighttpd
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

# 每星期六的 23:00 重启 lighttpd
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

# 每小时重启 lighttpd
0 */1 * * * /usr/local/etc/rc.d/lighttpd restart

# 晚上 23 点到早上 7 点之间,每隔 1 小时重启 lighttpd
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

# 每月 4 号,及每周一到周三的 11:00 重启 lighttpd
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

# 每年 1 月 1 日的 4:00 重启 lighttpd
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

通过以上内容,可掌握 cron 定时任务的安装、配置、格式及常见用法,灵活实现脚本的自动执行。

0

评论 (0)

取消