windows & MacOS 的定时JOB设置
做了一些程序以后呢,爬取网站呀,获取监控呀,就需要设定定时作业。
定时作业部署在不关机的server上肯定谁最好的。但是正常人肯定不是随便就能搞到服务器的,服务器还是有成本的。
那么就用自己的pc机器吧~
(更新:发现可以通过云平台的serverless服务执行定时脚本。腾讯云TencentCloud的Serverless云函数SCF)
Windows OS
Windows,最普遍的操作系统。
本身自带一个程序【计划任务(Task Scheduler)】
我们使用它设定和执行定时任务。
Task Scheduler(计划任务)
搜索task scheduler就能找到,然后新建定时任务。
定时任务(方法一)
直接新建,然后设置【Trigger】,【Actions】选择要执行的程序。
注意,如果程序脚本中涉及到了读写文件的操作,文件地址一定要写全绝对路径。因为执行脚本的目录并不是程序所在的相对路径的。
(因为我的直接脚本都是python写的,所以我执行程序使用的python)
定时任务(方法二)
除了直接执行程序,也可以选择写一个powershell脚本,执行脚本。然后在powershell脚本中调用程序脚本。是有种“脱裤子放屁”的感觉哈。除了能避免忽略文件绝对路径的问题,好像也没啥用途。 (也不是什么主要优点)
可能我本人,比较喜欢powershell脚本吧。 o( ̄︶ ̄)o
Windows上如果是一般的脚本,建议还是通过powershell写。
MacOS
Mac使用自带的launchctl服务。
编写plist文件
首先要编写plist文件,代码参考如下。
Plist文件,是launchctl服务执行使用的。对于其他脚本的执行,需将脚本名称写在plist文件里。
1 | <?xml version="1.0" encoding="UTF-8"?> |
编写sh脚本
plist文件中指定了脚本地址,我们需要创建这个sh脚本。
以如下代码为例,我直接是使用python执行py脚本。
1 | #!/bin/sh |
plist文件部署位置
plist可以放在如下位置:
- ~/Library/LaunchAgents 由用户自己定义的任务项
- /Library/LaunchAgents 由管理员为用户定义的任务项
- /Library/LaunchDaemons 由管理员定义的守护进程任务项
- /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
- /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项
我自己是放在了 【~/Library/LaunchAgents 】里面。
【 /Library/LaunchAgents】目录,由于Mac本身的安全策略,无法直接把文件放进去,需要先解除安全策略,我嫌麻烦就没用。lauchctl命令加载
只有加载了文件的任务,才能定时执行。terminal中输入:1
2# 加载任务, -w会将plist文件中无效的key覆盖掉,建议加上。
launchctl load -w lhd.backstage.program.plist
以上,定时job就设置完成了。
常规launchctl命令
1 | launchctl load -w lhd.backstage.program.plist |
总结
个人觉得,都挺方便的。
只不过windows一如既往的可以通过可视化的配置界面进行设定,mac要一直通过在terminal码命令行设置。
windows:task_scheduler ➡️ powershell脚本 ➡️ py程序
macOS:launchctl ➡️ sh脚本 ➡️ py程序
思路都是一样的,就是:使用当前操作系统下,原生支持度最高的语言,编写脚本,调用实际执行程序或脚本。
以上。