在Mac上定时执行Python脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Mac上定时执行Python脚本相关的知识,希望对你有一定的参考价值。
参考技术A 写惯了Python脚本,需求越来越多,越来越强烈,那么面对需求,可能就会有各种定制化的要求条件出来,由于一些事情需要经常执行,但是不能人工每次去执行,自然就想到了能不能定时去执行Python脚本,通过查询,映入眼帘的是crontab。具体执行方法是。
在iterm中输入 crontab -e ,这个的作用是编辑任务名。
随后就打开了vim,可以进行编辑
具体规则是
在其中我输入了
其目的是希望每天10点、15点、18点的时候执行Python脚本。
保存之后,会弹出是否允许管理电脑,直接点好就可以。
保存了之后可以通过 crontab -l 来查看是否创建成功
这样就创建成功了,等待明天的好消息了。
今天早上十点没有看到执行的操作,然后看到控制台有一条消息是
查看对应的文件描述是
了解到原来是没有找到python3,所以将命令改为
修改Python的路径后,有看到了报错如下:
这说明Python脚本已经运行起来了,但是因为编码原因没有完全成功运行,因为本身自动运行也没有必要print,所以去掉即可,我把print去掉之后,成功执行了脚本。
参考资料: https://www.jianshu.com/p/333d799aebb1
Mac执行定时任务之Launchctl
launchctl是一个统一的服务管理框架,启动、停止和管理守护进程、应用程序、进程和脚本。下面讲述一下如何在Mac上使用launchctl执行定时任务。
一、编写一个plist文件
launchctl 将根据这个plist文件的信息来启动任务,plist文件中的关键字可以在 苹果官方文档 找到,值得注意的是 Label
对应的值需要保证唯一性,作为任务的唯一标示。可以使用如下命令来验证plist格式的正确性(不代表命令有效):
$ plutil-lint /Users/denglibing/Library/LaunchAgents/com.denglibing.checkin.plist
这个是一个完整的 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.denglibing.checkin</string>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array> <string>/Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Weekday</key>
<integer>1</integer>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<string>58</string>
</dict>
<dict>
<key>Weekday</key>
<integer>2</integer>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<string>52</string>
</dict>
</array>
<key>StandardOutPath</key>
<string>/Users/denglibing/Desktop/denglibing_checkin/outlog</string>
<key>StandardErrorPath</key>
<string>/Users/denglibing/Desktop/denglibing_checkin/errorlog</string>
</dict>
</plist>
二、编写定时脚本
即上面plist文档中的 denglibing_checkin_request.sh
脚本,以最简单的为例 (打开脚本):
# denglibing_checkin_request.sh
$ open /Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh
值得注意的是,需要设置这个脚本为可执行文件:
$ chmod a+x /Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh
三、plist文件的位置
* ~/Library/LaunchAgents 由用户自己定义的任务项
* /Library/LaunchAgents 由管理员为用户定义的任务项
* /Library/LaunchDaemons 由管理员定义的守护进程任务项
* /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
* /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项
建议放在 ~/Library/LaunchAgents 下面。
/System/Library和/Library和~/Library目录的区别?
/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。
LaunchDaemons和LaunchAgents的区别?
LaunchDaemons是用户未登陆前就启动的服务(守护进程)。
LaunchAgents是用户登陆后启动的服务(守护进程)。
四、加载命令
# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上
$ launchctl load -w com.denglibing.checkin.plist
# 删除任务
$ launchctl unload -w com.denglibing.checkin.plist
# 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'com.denglibing'
五、总结
launchctl在定时启动任务非常简单和方便,值得注意的地方就是 plist 文件了。
1、Label:对应的需要保证全局唯一性;
2、Program:要运行的程序;
3、ProgramArguments:命令语句
4、StartCalendarInterval:运行的时间,单个时间点使用dict,多个时间点使用 array <dict>
5、StartInterval:时间间隔,与StartCalendarInterval使用其一,单位为秒
6、StandardInPath、StandardOutPath、StandardErrorPath:标准的输入输出错误文件,这里建议不要使用 .log 作为后缀,会打不开里面的信息。
7、定时启动任务时,如果涉及到网络,但是电脑处于睡眠状态,是执行不了的,这个时候,可以定时的启动屏幕就好了。
六、相关链接
以上是关于在Mac上定时执行Python脚本的主要内容,如果未能解决你的问题,请参考以下文章