这部分没什么难度,主要是这个网站的cookies
的Max-Age
有31449600
秒,大概1年的寿命,所以直接将存好的cookies
用requests
发一个get请求到验证地址就行。稍微修改了博主杨英明代码如下:
import requests
import time
# 登录验证地址
check_url = 'http://readfree.me/accounts/checkin'
# 记录程序运行时的时间
fp = open('./auto_signon_readfree.log','a')
ISOTIMEFORMAT='%Y-%m-%d %X'
curtime = time.strftime(ISOTIMEFORMAT, time.localtime(time.time()))
print ('at %s'%curtime)
fp.write('at %s\n'%curtime)
# 准备cookie
print ('准备cookie中……')
fp.write('准备cookie中……\n')
cookie_str = 'cookies here'
cookie = {}
for line in cookie_str.split(';'):
name,value=line.strip().split('=',1)
cookie[name]=value
print (cookie)
fp.write('%s\n'%cookie)
# 使用cookie访问网站
print ('签到中……')
fp.write('签到中……\n')
res = requests.get(check_url,cookies=cookie)
print (res)
fp.write('%s\n\n'%res)
这一步确实是踩了不少坑,还是Linux知识太欠缺了。
crontab -e
中加入指令0 1 * * * python3 ~/autoSign/autoSign_readfree/py
不执行python3
绝对路径后依旧不执行crontab
log发现文件不存在.py
文件头部添加#!/usr/bin/env python3
报错env: python\r: No such file or directory
2
的后依旧不执行,考虑用新自动任务输出hello
到log检测crontab
是否出错,发现crontab
能正常运行,随后考虑修复3
问题
crontab
是默认不开启log功能的,解决方法如下:
修改rsyslog
服务,将 /etc/rsyslog.d/50-default.conf
文件中的 #cron.*
前的 #
删掉,再使用service rsyslog restart;
重启rsyslog
服务
crontab
中使用python3
命令,遂使用4
在python文件头部添加#!/usr/bin/env python3
让crontab
以类似运行.sh
文件的形式打开.py
。
在使用chmod a+x autoSign_readfree.py
修改权限后报错env: python\r: No such file or directory
参考stackoverflow发现是脚本包含CR字符。shell将这些CR字符解释为参数。使用以下脚本去除CR字符:
with open('autoSign_readfree.py', 'rb+') as f: content = f.read() f.seek(0) f.write(content.replace(b'\r', b'')) f.truncate()
成功!
最后在crontab
中添加命令0 1 * * * ./autoSign_readfree.py
大功告成!(据说每条命令必须换行才能执行)
crontab
小知识crontab
任务
crontab -e
crontab
任务
crontab -l
0 2 * * * /bin/sh backup.sh //每天 02:00 执行任务
0 5,17 * * * /scripts/script.sh //每天 5:00和17:00执行任务
* * * * * /scripts/script.sh //每分钟执行一次任务
0 17 * * sun /scripts/script.sh //每周日 17:00 执行任务
*/10 * * * * /scripts/monitor.sh //每 10min 执行一次任务
* * * jan,may,aug * /script/script.sh //在特定的某几个月执行任务
0 17 * * sun,fri /script/scripy.sh //在特定的某几天执行任务
0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh //在某个月的第一个周日执行任务
* * * * * sleep 30; /scripts/script.sh //每个30秒执行一次任务
* * * * * /scripts/script.sh; /scripts/scrit2.sh //多个任务在一条命令中配置
@reboot /scripts/script.sh //系统重启时执行