mac crontab默认不工作,因catalina起禁用cron守护进程且需授予/usr/sbin/cron完全磁盘访问权限;须执行sudo launchctl load -w /system/library/launchdaemons/com.vix.cron.plist启用服务,并用crontab -e配置绝对路径任务。

Mac终端定时执行任务时,crontab默认无法工作,因为系统自Catalina起禁用了cron守护进程,且未授权完全磁盘访问权限会导致脚本静默失败。
启用并验证cron守护进程
macOS不默认运行cron,必须手动加载系统级服务才能响应定时指令。
在终端中执行:sudo launchctl list | grep cron
若输出为空或仅显示- com.vix.cron,说明服务未激活;若显示类似32065 com.vix.cron,则已就绪。
未激活时,执行:sudo launchctl load -w /System/Library/LaunchDaemons/com.vix.cron.plist
【必须重启终端或新开一个窗口】,否则后续命令可能仍读不到生效状态。
授予完全磁盘访问权限
这一步跳过会导致脚本路径读取失败、日志写入被拒、任务无声消失——所有错误都不会提示。
打开「系统偏好设置 → 隐私与安全性 → 隐私」→ 左侧选「完全磁盘访问权限」
点击锁图标输入管理员密码解锁
点击「+」→ Shift + Command + G → 输入/usr/sbin/cron → 回车添加
确保列表中cron右侧复选框已勾选
配置用户级定时任务
用crontab -e编辑当前用户任务最安全,无需sudo,避免权限错位。
第一步:在终端运行crontab -e,首次使用会提示选择编辑器,选nano更友好
第二步:在新行输入完整格式的定时指令,例如每天上午9点执行Python脚本:0 9 * * * /usr/bin/python3 /Users/yourname/scripts/job.py >> /Users/yourname/logs/job.log 2>&1
第三步:保存退出。nano中按Ctrl+O→回车确认文件名→Ctrl+X退出;vim中按Esc→输入:wq→回车
【脚本路径必须是绝对路径,不能用~或$HOME】,否则cron根本找不到文件。
验证任务是否生效
立即检查是否写入成功:crontab -l
若返回空行或提示no crontab for username,说明上一步没保存或保存失败
手动运行一次脚本确认可执行:/usr/bin/python3 /Users/yourname/scripts/job.py
如果报Permission denied,补执行:chmod +x /Users/yourname/scripts/job.py











