可能有很多朋友和我一样,每天都得登录一些网站完成签到任务。但是每次都手动干太麻烦,所以不如创建一个自动的定时签到任务。
运行环境:macOS 10.14.5
主要用到的命令:launchctl
整个创建的过程如下:
- 编写基于python的签到程序;
这里用得是requests
的第三方库,具体代码内容视网站不同登录而定,但是都需要加入查询网络是否无连接的功能isNoConnection()
,这样可以避免在后续系统唤起时因为网络问题导致的定时任务失败。
def isNoConnection():
try:
import requests
html = requests.get("http://www.baidu.com",timeout=2)
except:
return True
return False
- 编写shell脚本程序来执行python文件;
其实直接在python程序头写入执行命令也可以,譬如#!/usr/bin/python
,但此处进行这一步主要是为了后续扩展,以便一同执行其它的任务。这个shell文件比较简单,只有两点需要注意:其一是开头要指明shell的执行程序,即#! /bin/bash
,其二就是任何命令与文件都要写明完整的路径,即绝对路径。打个样,如下:
#! /bin/bash
/Users/yourname/bin/python /Users/yourname/Documents/login.py
echo "work done"
- 编写定时任务plist文件;
本质就是一个xml文件,只是有一些特殊的字段约定,譬如定时需要用到StartCalendarInterval
,所以写起来也比较简单。此处可以参考下面几个链接:设置 Mac 启动和唤醒时执行任务的几种方法,How to run script at wake?,Launchd.plist with WatchPaths key: How to set a minimum interval?。 - 加载plist文件;
这就用到launchctl
命令,用起来也非常简单,命令行界面进入到plist文件所在目录,可以使用如下命令:(建议参考 launchctl :MAC 下的定时任务)
// 加载任务
$ launchctl load com.test.task.plist
// 删除任务
$ launchctl unload com.test.task.plist
// 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'com.test.task.plist'
// 开始
$ launchctl start com.test.task.plist
// 停止
$ launchctl stop com.test.task.plist
那么现在完成上面4步,就创建了你的每日定时签到任务。
值得注意的是,当mac进入休眠状态时,网络是不可用的,那么即便到了定的时间,也无法执行任务,这时第一步的网络连接检测功能就变得很重要了。不过一旦系统被唤醒,只要定的时间已过,该定时任务就会立刻执行一次。
网友评论