如何让 python 应用程序在主机上 24/7 运行?

问题描述 投票:0回答:1

我写了一个迷你应用程序,它会抓取我学校的网站,然后查找上一篇文章的标题,将其与旧标题进行比较,如果不一样,它就会向我发送一封电子邮件。 为了使应用程序正常工作,它需要保持 24/7 持续运行,以便标题变量的值正确。 这是代码:

import requests
from bs4 import BeautifulSoup
import schedule, time
import sys
import smtplib


#Mailing Info

from_addr = ''
to_addrs = ['']

message = """From: sender
To: receiver
Subject: New Post

A new post has been published
visit the website to view it: 
"""


def send_mail(msg):
    try:
        s = smtplib.SMTP('localhost')
        s.login('email',
         'password')
         
        s.sendmail(from_addr, to_addrs, msg)
        s.quit()
    except smtplib.SMTPException as e:
        print(e)


#Scraping
URL = ''

title = 'Hello World'


def check():
    global title
    global message

    page = requests.get(URL)
    soup = BeautifulSoup(page.content, 'html.parser')

    main_section = soup.find('section', id='spacious_featured_posts_widget-2')
    first_div = main_section.find('div', class_='tg-one-half')

    current_title = first_div.find('h2', class_='entry-title').find('a')['title']

    if current_title != title:
        send_mail(message)
        title = current_title
    else:
        send_mail("Nothing New")


schedule.every(6).hours.do(check)

while True:
    schedule.run_pending()
    time.sleep(0.000001)

所以我的问题是如何使用 Cpanel 保持此代码在主机上运行? 我知道我可以使用 cron 作业每隔 2 小时运行一次,但我不知道如何保持脚本本身运行,当我关闭页面时使用终端不起作用,应用程序被终止

python automation cpanel web-hosting smtplib
1个回答
2
投票

因此,通常要长时间运行程序,需要对它们进行守护进程。本质上是通过双叉和 set-sid 与终端断开连接。话虽如此,我自己实际上从未这样做过,因为它通常要么(a)错误的解决方案,要么(b)它重新发明轮子(https://github.com/thesharp/daemonize) .

在这种情况下,我认为更好的做法是每 6 小时调用一次脚本,而不是让它在内部每 6 小时执行一些操作。让您的程序能够适应重新启动几乎是大多数系统保持可靠性的方式,并将它们放入自动重新启动的“摇篮”中。

就您而言,我建议将标题保存到文件中,并在调用脚本时读取和写入该文件。它将使您的脚本更简单、更健壮,并且您将使用久经考验的工具来完成这项工作。

几年后,当您编写的代码需要在整个机器崩溃后幸存下来并被替换(在 6 小时内,所有东西都已安装)时,您可以使用某种外部形式的存储(例如数据库)来代替文件,使您的系统更具弹性。

© www.soinside.com 2019 - 2024. All rights reserved.