macOS下使用crontab定时任务

本文详细指导如何在MacOS上使用launchctl管理crontab定时任务,包括检查服务状态、配置启动项、创建和编辑cron任务,以及在Catalina及以上系统的权限设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

macOS下的crontab定时任务和Linux略有不同,它是由launchctl来管理的。

首先查看服务是否运行

sudo launchctl list | grep cron

一般会输出

11782   0   com.vix.cron

-   0   com.vix.cron

接下来查看启动项的配置:

locate com.vix.cron

如果提示database不存在,按照提示步骤创建一个:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

查看配置项

cat /System/Library/LaunchDaemons/com.vix.cron.plist

过个几分钟再次执行

locate com.vix.cron

如果输出/System/Library/LaunchDaemons/com.vix.cron.plist表示启动项已配置好了。

最后检查下/etc/crontab文件是否存在,如果不存在则创建

sudo touch /etc/crontab

这些都检查完之后就可以通过crontab -e创建任务了。

PS:在macOS 10.15 Catalina以上的系统上,由于权限升级,还需要给cron添加完全磁盘访问权限,不然定时任务还是无法执行。

具体方法,先打开系统偏好设置->隐私->完全磁盘访问权限,左下角解锁。然后打开Finder,菜单栏前往->前往文件夹,输入/usr/sbin,找到cron,把它拖到完全磁盘访问权限的列表中。

编写 `crontab` 定时任务是一种在类 Unix 系统(如 Linux 和 macOS)上设置周期性工作的常用方法。通过 Crontab 文件可以安排命令或脚本自动运行而无需人工干预。 ### 创建和编辑 crontab 每个用户都有自己独立的 crontab 文件,默认存储位置通常为 `/var/spool/cron/username` 或类似路径下,不过直接修改文件内容并不是推荐的做法;而是应该使用系统提供的 `crontab -e` 命令来创建、编辑以及删除定时任务条目: ```bash crontab -e # 编辑当前用户的crontab配置 ``` 这将打开默认文本编辑器,在其中添加新的行以定义计划任务。 ### 设置表达式格式 一条完整的 cron 表达由五个时间字段加上要执行的操作构成,各部分之间用空格分隔开。格式如下所示: ``` * * * * * command_to_execute | | | | | | | | | +----- 星期几 (0-7) (星期天=0 or 7) | | | +------- 每月第几天(1-31) | | +--------- 月份 (1-12) | +----------- 小时 (0-23) +------------- 分钟 (0-59) command_to_execute // 需要执行的具体命令或者脚本路径 ``` 例如,如果希望每天凌晨两点整备份数据库,则可以在 crontab 中加入这样的记录: ``` 0 2 * * * /path/to/mysqlbackup.sh ``` 表示的是 "当时间为每个小时的第 0 分,并且此时是当天的第 2 小时时" 执行该指定操作。 另外还有些特殊的字符可以用来自定义规则: - `-`: 连续范围的意思; - `,`: 列举多个值。 #### 示例解析: 1. **每周一到周五上午8点** 发送提醒邮件给团队成员: ``` 0 8 * * 1-5 echo 'Good morning team!' | mailx -s "Daily Reminder" group@company.com ``` 2. **每月第一天午夜重启某个服务程序** ``` 0 0 1 * * systemctl restart myservice ``` 3. **每十分钟保存日志信息至特定目录下的文件中** ``` */10 * * * * logger -p local6.info $(date "+%Y-%m-%d %H:%M:%S") >> /var/log/myapp.log ``` 一旦完成了所有必要的设定之后,请记得保存并退出编辑器。随后可通过以下指令查看已有的 crontab 条目列表: ```bash crontab -l ``` 如果您想移除现有的某一项或者是全部的任务项的话,同样也有相应的命令可用: ```bash # 删除单个任务 crontab -r [file] # 此处 [file] 是指包含您想要删除的那一行的临时文件名 # 清除所有的任务 crontab -r # 直接清除整个 crontab 内容 ``` 最后要注意的一点就是环境变量的问题。由于 cron 工作是在一个非常精简的 shell 下面运作的,因此它不会继承您的 Bash Profile 变量等东西。所以最好在命令前显式地声明所需的 PATH 或其他重要的环境变量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值