macOS 中使用 launchd 每分钟执行一次 PHP 脚本的完整配置指南

本文详解如何在 macOS 上通过 launchd(配合 .plist 配置文件)替代传统 cron,实现每分钟自动运行 PHP 脚本,涵盖 plist 编写、权限设置、加载调试及关键避坑提示。 本文详解如何在 macos 上通过 `launchd`(配合 `.plist` 配置文件)替代传统 cron,实现每分钟自动运行 php 脚本,涵盖 plist 编写、权限设置、加载调试及关键避坑提示。在 macOS 系统中,launchd 是官方推荐的守护进程管理机制,比传统 cron 更可靠、更集成,尤其适合用户级定时任务(如每分钟执行一个 PHP 脚本)。与 Linux 的 crontab 不同,launchd 通过 XML 格式的 .plist 文件定义任务行为,支持精确的时间间隔、环境隔离和自动重启等高级特性。? 正确创建 LaunchAgent plist 文件将以下内容保存为 ~/Library/LaunchAgents/com.yourname.php-minutely.plist(请将 yourname 替换为实际用户名,并确保命名符合反向域名规范):<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>Label</key> <string>com.yourname.php-minutely</string> <key>ProgramArguments</key> <array> <string>/usr/bin/php</string> <string>/Users/yourname/projects/myapp/script.php</string> </array> <key>WorkingDirectory</key> <string>/Users/yourname/projects/myapp</string> <key>StartInterval</key> <integer>60</integer> <key>RunAtLoad</key> <true/> <!-- ?? 生产环境默认注释掉;仅调试时启用 --> <!-- <key>StandardOutPath</key> <string>/tmp/php-minutely.log</string> <key>StandardErrorPath</key> <string>/tmp/php-minutely.err</string> --></dict></plist>? 关键字段说明: Label:唯一标识符,必须与文件名一致(不含 .plist 后缀); ProgramArguments:不可用 shell -c 包裹,需显式指定 PHP 解释器路径(建议用 which php 确认)及脚本绝对路径; WorkingDirectory:确保脚本内相对路径(如 include 'config.php';)能正确解析; StartInterval 60:严格按秒计时,每 60 秒触发一次(非"每分钟整点"); RunAtLoad:系统登录后立即启动,避免首次延迟。? 设置权限并加载任务# 设置标准权限(644 是 launchd 强制要求)chmod 644 ~/Library/LaunchAgents/com.yourname.php-minutely.plist# 验证权限(应显示 -rw-r--r--)ls -l ~/Library/LaunchAgents/com.yourname.php-minutely.plist# 加载配置(无需 sudo,因属用户级 LaunchAgent)launchctl load ~/Library/LaunchAgents/com.yourname.php-minutely.plist# ? 可选:立即手动触发一次测试launchctl start com.yourname.php-minutely? 提示:若加载失败,运行 launchctl list | grep yourname 查看是否已注册;错误日志可通过 console.app 搜索 com.yourname.php-minutely 实时追踪。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

相关推荐
qq_225891746615 分钟前
基于Python的中药药材数据可视化分析系统
python·机器学习·数据分析·django
changshuaihua00116 分钟前
Redis 详解:Redis 与 MySQL 的区别、数据类型与缓存三大问题
数据库·redis·缓存
qetfw24 分钟前
Debian 配置 AIDE 文件完整性检测:基线初始化、变更检查与数据库更新
linux·网络·数据库·debian
卷无止境38 分钟前
LangExtract:让LLM从杂乱文本中"抠"出结构化数据的开源工具
后端·python
Elastic 中国社区官方博客39 分钟前
Elasticsearch:搜索教程 - 语义搜索(三)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
栈溢出的浪漫43 分钟前
码界领航:Python拓界-机器学习Web跨平台
python·机器学习·跨平台·web开发·个人项目
卷无止境1 小时前
软件复杂度:那些让代码变得难以理解的东西,到底能不能量化?
后端·python
随风M记忆s2 小时前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
老白干3 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j