launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。通过配置文件来指定执行周期和任务的。在Mac上,也可以像Linux系统一样,使用crontab命令来添加定时任务。下面将手把手教你在mac上创建定时任务。
任务目标:每天晚上十点定时执行/Users/demo/helloworld.py的python程序。
1. 创建run.sh脚本
```bash
#!/bin/sh
# 记录一下开始时间
echo `date` >> /Users/demo/log &&
# 进入helloworld.py程序所在目录
cd /Users/demo &&
# 执行python脚本(注意前面要指定python运行环境/usr/bin/python,根据自己的情况改变)
/usr/bin/python helloworld.py &&
# 运行完成
echo 'finish' >> /Users/demo/log
:wq
chmod 777 run.sh
```
2. 编写plist文件
launchctl 将根据plist文件的信息来启动任务。plist脚本一般存放在以下目录:
- /Library/LaunchDaemons/Library/LaunchAgents
- ~/Library/LaunchAgents (由用户自己定义的任务项)
- /Library/LaunchAgents (由管理员为用户定义的任务项)
- /Library/LaunchDaemons (由管理员定义的守护进程任务项)
- /System/Library/LaunchAgents (由Mac OS X为用户定义的任务项)
- /System/Library/LaunchDaemons (由Mac OS X定义的守护进程任务项)
新建一个名为com.demo.plist的文件,内容如下:
```xml
```
保存文件后,将其放入以下目录之一:
- ~/Library/LaunchAgents (由用户自己定义的任务项)
- /Library/LaunchDaemons (由管理员为用户定义的任务项)
以下是重构后的内容:
```xml
```
加载命令:
```bash
launchctl load -w com.demo.plist
```
更多命令:
- 加载任务:`launchctl load -w com.demo.plist`,使用 `-w` 选项会将 plist 文件中无效的 key 覆盖掉。建议加上 `$ launchctl load -w com.demo.plist`。
- 删除任务:`$ launchctl unload -w com.demo.plist`。
- 查看任务列表:`$ launchctl list | grep 'com.demo'`。使用 `grep` 函数过滤出包含 "com.demo" 的任务部分名字。
- 开始任务:`$ launchctl start com.demo.plist`,可以测试任务,这个是立即执行,不管时间到了没有。
- 停止任务:`$ launchctl stop com.demo.plist`。如果任务被修改了,那么必须先使用 `unload` 命令卸载,然后重新加载。
番外篇:
- StartInterval:指定脚本每间隔多长时间(单位:秒)执行一次。
- StartCalendarInterval:可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似于 crontab 中的设置。包括以下键值对:
```
Minute
Hour
Day
Weekday
Month
```
plist部分参数说明:
- Label:需要保证全局唯一性对应的标签。
- Program:要运行的程序。
- ProgramArguments:命令语句。
您可以使用crontab命令或launchctl命令在Mac上添加定时任务。使用crontab命令,您可以在固定的间隔时间执行指定的系统指令或shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
以下是一个示例crontab文件:
```
* * * * * /path/to/your/script.sh
```
这将在每分钟运行一次您的脚本。如果您想要每天晚上10点运行脚本,可以使用以下crontab文件:
```
0 22 * * * /path/to/your/script.sh
```