如何保持python应用程序在主机上全天候运行?
我写了一个迷你应用程序,它可以浏览我学校的网站,然后查找上一篇文章的标题,将其与旧标题进行比较,如果不一样,它会给我发送一封电子邮件。 为了让应用程序正常工作,它需要保持24/7运行,以便title变量的值是正确的。 代码如下:如何保持python应用程序在主机上全天候运行?,python,automation,web-hosting,smtplib,Python,Automation,Web Hosting,Smtplib,我写了一个迷你应用程序,它可以浏览我学校的网站,然后查找上一篇文章的标题,将其与旧标题进行比较,如果不一样,它会给我发送一封电子邮件。 为了让应用程序正常工作,它需要保持24/7运行,以便title变量的值是正确的。 代码如下: import requests from bs4 import BeautifulSoup import schedule, time import sys import smtplib #Mailing Info from_addr = '' to_addrs
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小时运行一次,但我不知道如何保持脚本本身的运行,当我关闭页面时,使用终端不起作用,应用程序会被终止,因此-通常要长时间运行程序,它们需要被守护。基本上是用一个双叉和一个设置sid从终端断开的。话虽如此,我自己从来没有真正做过,因为它通常要么是(a)错误的解决方案,要么(b)它在重新发明轮子() 在这种情况下,我认为更好的做法是每6小时调用一次脚本,而不是让它每6小时内部执行一次。让你的程序对重启有弹性,这在很大程度上是保持大多数系统的可靠性的方法,并把它们放在一个自动重启它们的“摇篮”中 在您的情况下,我建议将标题保存到文件中,并在调用脚本时读取和写入该文件。这将使您的脚本更简单、更健壮,并且您将使用经过斗争的工具来完成这项工作
几年后,当你编写的代码需要在整个机器崩溃中生存下来,并且被替换(在6小时内,所有东西都安装好)时,你可以使用一些外部存储形式(如数据库)而不是文件,以使你的系统更具弹性。你应该解释为什么你需要这方面的帮助;是什么阻止它像现在这样全天候运行?看起来它应该已经这样做了。它会崩溃吗?主机是否正在终止进程?主机是否偶尔重新启动?所有这些都可能有不同的解决方案,根据问题的不同,您可能需要多种解决方案。这可能更像是一个操作系统或Cpanel问题。如果您在Cpanel下运行Linux服务器,那么让python进程永远运行的一种方法是:nohup python yourcode.py>logfile&nohup在您断开连接时保持进程运行,&在后台启动它,以便您可以注销。您是否在Cpanel上运行服务器??您可以使用操作系统提供的调度程序,例如,通过cron运行您的脚本。谢谢,这样做更有意义!在这种情况下,cron将是首选的解决方案。一般来说,您可以将服务部分委托给systemd(不需要在脚本中取消名字化)并获得同意;如果可用,cron是用于调度的最佳实战工具。我提到了daemonize,因为尽管我不同意这种方法,但这个问题确实明确提出了持续运行脚本的问题,我不确定systemd是否可用。我推荐的方法既不需要systemd也不需要daemonize。