Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址
家里不是固定的公网IP地址,所以公网IP总是到期了就变化。年轻的时候把3389映射出去,通过公网IP地址远程桌面连接到家里的电脑。怎么获取公网IP地址难住了当时的我,所以用Python写了获取公网IP地址然后发送邮件的脚本,在windows上测试没问题以后就在NAS中设置任务计划,每天执行一次,邮件通知我当天的公网IP地址。
脚本内容如下,大概原理就是先通过打开查询IP地址的网页,截取IP地址,重新编好文字以后通过SMTP邮件服务登陆邮箱发出来。
#!usrbinpython3
#coding=utf-8
from urllib import request
import re
import smtplib
from email.mime.text import MIMEText
from email.header import Header
url = str(request.urlopen(r'http://txt.go.sohu.com/ip/soip').read())
ip = re.findall(r'd+.d+.d+.d+', url)
print(ip[0])
# 第三方 SMTP 服务
mail_host='smtp.yeah.net' #邮件发件服务器
mail_user='xxxxxx@yeah.net' #用户名
mail_pass='xxxxxx' #邮箱密码
sender = 'xxxxxx@yeah.net' #和上面的用户名一致
receivers = ['xxxxxx@yeah.net'] # 接收邮件
message = MIMEText('家里公网IP地址是 '+ip[0], 'plain', 'utf-8')
message['From'] = f"{Header('xxx-NAS', 'utf-8')} <{sender}>"
message['To'] = Header("xx", 'utf-8')
message['Subject'] = Header("家里公网IP地址通知", 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print ("Sucess")
except smtplib.SMTPException:
print ("Error")
办法很土,但这确实是我上学时候第一次用Python呢。把Python脚本文件“PublicIP.py”放到NAS固定的路径下,如图设置一个定期执行的任务,这就可以了。


现在咱们试一下用青龙面板,代替群晖中的任务计划,定时实现相同的功能。
首先登陆青龙面板,左边选择脚本管理,右边点击加号选择创建脚本,点击本地文件,然后上传刚才的“PublicIP.py”脚本,然后即可在网页中看到和编辑脚本。


下一步创建定时任务,左侧点击定时任务,右侧选择创建任务,填写任务名称,脚本名称,以及定时类型和规则,这里为了测试,先选择手动运行吧。


点击右侧“运行”,点击确定后即运行了脚本,任务状态会变成“运行中”。
然后点击右侧的“日志”即可查看结果。



登陆邮箱即可看到自动发出的邮件。

测试成功以后,回到任务设置,修改定时类型为“常规定时”,定时规则为“0 0 9 * * *”即每天早上9点整。

青龙面板是通过Cron表达式来定义任务的周期性执行规则。Cron表达式由5或6个字段组成(部分实现支持7个字段),每个字段代表不同的时间单位(秒、分、时、日、月、周等)。
示例:
0 0 8 * * *:每天8点执行。*/10 * * * *:每10分钟执行一次。0 0 23 * *:每天23点执行。

校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案