前几天写了 Python
脚本进行爬虫,现在利用 launchctl
来定时开启爬虫任务,launchctl
通过 plist
属性列表(Property List)配置。Linux
和 Mac
通用的 crontab
时间间隔可以精确到分钟,而launchctl
时间间隔可以精确到每秒。
创建定时运行的任务脚本
run.sh
1 2 3 4 5 6 7 8 9 10 11 12 13
| #!/bin/bash
# 记录一下开始时间 echo `date` >> $HOME/log && # 进入 /Users/hanks/spider 目录 cd /Users/hanks/spider && # 激活 python 虚拟环境 virtualenv source venv/bin/activate && # 运行爬虫脚本 scrapy runspider spider.py && # 运行完成 echo 'finish' >> $HOME/log
|
&&
连接两条命令,当前一条执行完才会继续下一条命令。
创建定时任务文件
task.plsit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict>
<key>Label</key> <string>xyz.hanks.spider</string>
<!-- 要运行的程序, 如果省略这个选项,会把ProgramArguments的第一个 元素作为要运行的程序 --> <key>Program</key> <string>/Users/zhanks/work/Bookshelf/run.sh</string>
<!-- 每天18:30 --> <key>StartCalendarInterval</key> <dict> <key>Minute</key> <integer>30</integer> <key>Hour</key> <integer>18</integer> </dict>
<!-- 运行间隔,与StartCalenderInterval使用其一,单位为>秒 --> <!-- <key>StartInterval</key>--> <!-- integer>5</integer>-->
<!-- 标准错误输出文件,错误日志 --> <key>StandardErrorPath</key> <string>/Users/zhanks/run-err.log</string>
</dict> </plist>
|
将定时任务加入系统
1 2
| # 加载 task.plist $ launchctl load task.plist
|
查看是否添加成功
1 2
| $ launchctl list | grep hanks - 0 xyz.hanks.spider
|
如果像移除的话
1 2
| # 移除 xyz.hanks.spider $ launchctl remove xyz.hanks.spider
|
其他完整的 plist 文件格式参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <!-- 名称,要全局唯一 --> <string>xyz.hanks.spider</string>
<!-- 要运行的程序, 如果省略这个选项,会把ProgramArguments的第一个 元素作为要运行的程序 --> <key>Program</key> <string>/Users/hanks/run.sh</string>
<!-- 命令, 第一个为命令,其它为参数--> <key>ProgramArguments</key> <array> <string>/Users/hanks/run.sh</string> </array>
<!-- 运行时间 --> <key>StartCalendarInterval</key> <dict>
<key>Minute</key> <integer>30</integer>
<key>Hour</key> <integer>9</integer>
<key>Day</key> <integer>1</integer>
<key>Month</key> <integer>5</integer>
<!-- 0和7都指星期天 --> <key>Weekday</key> <integer>0</integer>
</dict>
<!-- 运行间隔,与StartCalenderInterval使用其一,单位为秒 --> <key>StartInterval</key> <integer>30</integer>
<!-- 标准输入文件 --> <key>StandardInPath</key> <string>/Users/hanks/run-in.log</string>
<!-- 标准输出文件 --> <key>StandardOutPath</key> <string>/Users/hanks/run-out.log</string>
<!-- 标准错误输出文件 --> <key>StandardErrorPath</key> <string>/Users/hanks/run-err.log</string> </dict> </plist>
|
Linux
和 Mac
通用的 crontab
定时任务: crontab 定时任务
参考文档
Mac下添加定时任务
文章来自: https://hanks.pub