一、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)