利用python制作在Linux服务器后台定时运行的任务-邮件提醒

简介: 1. 自动任务的功能为:   定时扫描数据库中的记录,然后发邮件 代码如下 scheduleMail.py import pymysql import smtplib from email.

1. 自动任务的功能为:

  定时扫描数据库中的记录,然后发邮件

代码如下

scheduleMail.py

import pymysql
import smtplib  
from email.mime.text import MIMEText  
from email.header import Header 
import time

def sendMail(body):
    sender = 'xxx@163.com'  
    receiver = ['abc@xxx.com', 'def@xxx.com', 'ghi@xxx.com'] 
    subject = '邮件主题'  
    smtpserver = 'smtp.163.com'  
    username = 'your username'  
    password = 'your password'  
    
    msg = MIMEText(body,'plain','utf-8') #中文需参数‘utf-8',单字节字符不需要  
    msg['Subject'] = Header(subject, 'utf-8')  
    msg['From'] = 'xxx<xxx@163.com>'    
    msg['To'] = "abc@xxx.com', 'def@xxx.com', 'ghi@xxx.com"  
    smtp = smtplib.SMTP()  
    smtp.connect('smtp.163.com')  
    smtp.login(username, password)  
    smtp.sendmail(sender, receiver, msg.as_string())  
    smtp.quit()  

def scanLogic():
    conn = pymysql.connect(host='服务器IP', user='数据库用户名', passwd='数据库密码', db='数据库名', port=3306, charset='utf8')
    cur = conn.cursor()
    
    sql = "select * from ..."
    
    cur = conn.cursor()
    cur.execute(sql)
    alldata = cur.fetchall()
    mailBody = ""
    separator = "----------------------------------------------\n"
    for rec in alldata:
        field1 = rec[0]
        field2 = rec[1]
        line = "field1: %s \t field2: %s \n" % (field1, field2)
        mailBody = mailBody + line + separator
    
    print('邮件正文: %s' % mailBody)
    if (mailBody != ""):
        sendMail(mailBody)
    else:
        print("无可发送邮件")

def main():
    while (True):
        time.sleep(1800)
        scanLogic()

main()

 

2. 把它做成后台任务的shell脚本如下

scheduleMail.sh

#!/bin/bash
cd /home/yourfolder
python -u scheduleMail.py

 

3. 如何杀死后台任务

这里有个坑,很多网上的博客没有说,我在这里提一下,以免大家重复去踩。

杀死该任务,就像杀死传统Linux进程一样

ps aux|grep scheduleMail
这里你会看到进程号,然后使用命令kill -9 scheduleMail就可以杀死该进程
 
但是,你会发现,进程虽然杀死了,后台任务仍在运行。
为什么呢?
你会你只是杀死了shell脚本的后台进程。
这里,你需要使用命令ps -e查看所有进程,
发现还有python进程在运行,杀死该python进程就好了
这样,整个后台任务就真的被杀死了!
 
目录
相关文章
若依修改,若依部署在本地运行时的注意事项,后端连接了服务器,本地的vue.config.js要先改成localhost:端口号与后端匹配,部署的时候再改公网IP:端口号
若依修改,若依部署在本地运行时的注意事项,后端连接了服务器,本地的vue.config.js要先改成localhost:端口号与后端匹配,部署的时候再改公网IP:端口号
|
23天前
|
JSON API 数据库
Python使用Quart作为web服务器的代码实现
Quart 是一个异步的 Web 框架,它使用 ASGI 接口(Asynchronous Server Gateway Interface)而不是传统的 WSGI(Web Server Gateway Interface)。这使得 Quart 特别适合用于构建需要处理大量并发连接的高性能 Web 应用程序。与 Flask 类似,Quart 也非常灵活,可以轻松地构建 RESTful API、WebSockets、HTTP/2 服务器推送等。
|
22天前
|
监控 数据挖掘 大数据
Linux中的nohup命令:让你的任务在后台持久运行
**Linux的`nohup`命令让任务在后台持续运行,即使终端关闭。它创建不受终端影响的新进程,常用于长时间任务,如数据处理。`nohup`将输出重定向至`nohup.out`,可使用`-p`选项避免此行为。示例:`nohup ./script.sh &gt; output.log 2&gt;&1 &`。记得检查输出、重定向、记录命令、监控任务并使用日志管理工具。**
|
23天前
|
存储 数据库连接 数据库
如何使用Python上传文件到FTP服务器
如何使用Python上传文件到FTP服务器
17 1
|
1天前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
5 0
|
17天前
|
Linux Shell Python
linux服务器python2升级安装python3.7环境
linux服务器python2升级安装python3.7环境
40 0
|
24天前
|
数据可视化 网络协议 Linux
Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面
Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面
21 0
|
5天前
|
存储 关系型数据库 数据库
给阿里云的建议和意见 一个云服务器架构是否可行
摘要(Markdown格式): 在修复阿里云服务器IPv4设置错误时遇到困难,导致服务器远程登录失败及外网访问受阻,耗时三天解决。建议阿里云更新文档,确保设置指导与实际情况一致,例如只需在路由表添加条目关联IPv4。此外,建议优化帮助页面,如采用折叠式设计减少干扰。服务器主要任务是数据分析、存储和分发,文中提出简化服务器框架,消除硬件软件复杂配置,利于初学者和独立开发者快速上手,降低时间成本。该设计旨在减少无用组件,节省资源,同时降低云服务商的人力和支持成本。期望云服务商考虑此类架构创新。目前未知是否有类似产品,期待业界反馈。
214 0
给阿里云的建议和意见 一个云服务器架构是否可行
|
7天前
|
存储 编解码 网络协议
阿里云服务器计算型和通用型四代云服务器实例区别及选择参考
目前阿里云在售的云服务器中,计算型和通用型实例规格都包含了第5代、第6代、第7代和最新第八代倚天云服务器产品,例如计算型实例中有c5、c6、c7、c8y实例,而通用型实例有g5、g6、g7、g8y等实例,有的新手用户并不清楚这四代产品之间的差别,本文为大家展示这四代云服务器实例在规格、CPU(核)、内存(G)、计算、存储、内存以及不同配置的指标数据等方面为大家做个对比,让大家了解一下他们之间的不同,以供参考和选择。
阿里云服务器计算型和通用型四代云服务器实例区别及选择参考
|
3天前
|
弹性计算 运维 安全
阿里云ecs使用体验
整了台服务器部署项目上线