一、原因
换了新公司,新公司有个订餐系统,但是需要在下午5点之前订餐,于是想到能不能每天下午4点半自动订餐呢,然后就想到了自动定时功能。
在linux下可以用crontab来定时执行任务,在MAC下可以用launchctl来定时执行任务。
二、过程
1.创建一个food.sh文件,负责打开网页,并进行相关逻辑操作
open https://www.baidu.com
2.在/Library/LaunchAgents目录下创建一个plist文件,这个就是系统执行任务时要使用的文件,文件名叫com.wade.food.plist,文件内容如下:
<?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.wade.food.plist</string>
<key>ProgramArguments</key>
<array>
<string>/food.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>30</integer>
<key>Hour</key>
<integer>16</integer>
</dict>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
简单的对这里边的内容说明一下:
label
这里就是给这个任务名个名字,这里一般取plist的文件名,这个名字不能和其它的plist重复。
/food.sh
是我们要执行的脚本存放位置。
StartCalendarInterval
里边的参数是说每一天16点30分的时候执行一下脚本。
然后就可以用下面的几个命令进行操作我们做好的任务了。
launchctl load com.wade.food.plist
launchctl unload com.wade.food.plist
launchctl start com.wade.food.plist
launchctl stop com.wade.food.plist
launchctl list
要加载我们做好的plist文件,就是用上面的第一个命令load,这个时候糸统就会在每天的16点30分执行我们的脚本。如果想去掉我们的定时任务就可以用unload命令。
如果一个任务今天的16点30分执行过了,然后你改了,com.wade.food.plist里面的时间,比如说改到16点30分执行,必须unload之后再重新load一下,不然当天不会再执行这个命令。
start可以测试任务,这个是立即执行,不管时间到了没有
stop可以停止任务
3.自动安装install.sh
#!/bin/bash
echo "安装ing..."
#安装plist
sudo cp ./com.wade.food.plist /Library/LaunchAgents/
sudo chmod a+x /Library/LaunchAgents/com.wade.food.plist
launchctl unload /Library/LaunchAgents/com.wade.food.plist
launchctl load /Library/LaunchAgents/com.wade.food.plist
#安装脚本
sudo cp ./food.sh /
sudo chmod a+x /food.sh
echo "安装完成!"
三、扩展
此功能只实现了每天下午4点半定时打开订餐网页,但是并没实现订餐的功能,这里暂时没有思路,因为对网页不熟悉,业余时间需要研究一下网站开发了。