Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保持python应用程序在主机上全天候运行?_Python_Automation_Web Hosting_Smtplib - Fatal编程技术网

如何保持python应用程序在主机上全天候运行?

如何保持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

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

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。