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

1. 自动任务的功能为:

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

代码如下

scheduleMail.py

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

def sendMail(body):
    sender = ‘[email protected]‘
    receiver = [‘[email protected]‘, ‘[email protected]‘, ‘[email protected]‘]
    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<[email protected]>‘
    msg[‘To‘] = "[email protected]‘, ‘[email protected]‘, ‘[email protected]"
    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进程就好了

这样,整个后台任务就真的被杀死了!

时间: 2024-09-28 02:27:48

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

如何在Windows系统上利用Telnet协议连接Linux服务器

Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家演示如何在Windows系统上利用Telnet协议连接Linux服务器. 步骤一:在Windows系统上打开Telnet功能:  步骤二:在Linux系统上启用Telnet服务. 步骤一:Windows终端开启Telnet功能 1/由于在Windows Vista之后的版本默认并没有提供Telnet

利用Python制作王者荣耀出装小助手,引来了老板的注意!

导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Python版本:3.6.4 相关模块: requests模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 主要思路 爬的是<英雄联盟盒子>这个APP.用Fiddler抓包找到需要的Get请求地址即可... 不过显示的Get请求很长,在

部署python项目到linux服务器

最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是Mac系统,virtualenv环境下的库文件和linux上所需要的库不通用,所以不能简单的将整个env拷贝到服务器运行,需要做一些额外的工作. 一般每个不同的项目都会依赖各自的库,有些库的版本不一样会引起冲突,为了解决这个问题,需要使用虚拟环境,Python可以在每个项目目录下创建各自的虚拟环境,项

利用python制作一个有趣的微信机器人

(想看更详细的同学可以参考:https://www.cnblogs.com/liyanyinng/p/10963105.html) 利用python在微信上制作小型机器人,下面可以来看一下下面的代码 1 #-*- coding:utf-8 -*- 2 import itchat 3 import requests 4 5 def get_response(msg): 6 apiurl = 'http://i.itpk.cn/api.php' #//moli机器人的网址 7 data={ 8 "q

一段代码可以让Python直接在Linux/Mac/Unix上运行

在ptyhon文件头上加上 #!/usr/bin/env python 即可直接在Linux/Mac/Unix上运行 并且也可以定义其编码方式 代码如下: # -*- coding: utf-8 -*-

Python web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

利用Python制作一个连连看小游戏,边学边玩!

导语 今天我们将制作一个连连看小游戏,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 在cmd窗口运行"Game15.py"文件即可. 效果如下: 原理简介 游戏规则: 玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不

让python脚本在linux的后台执行,使其成为守护进程

在里以python脚本为例 #vim /etc/init/open-status.conf 其中open-status.conf中的内容即为我们要编辑的,在后续启动中也会用到(open-status),如start open-status其实就是调用了open-status.conf的配置. 内容如下: description "Listen to the status information of the openvpn and connect to the database to write

利用Python 程序实现Linux 网卡 bonding 实现

#!/usr/bin/env python import os,sys,time,re,shutil import socket import fcntl import struct import traceback import commands #Get interface name interface_path = '/etc/sysconfig/network-scripts/' def LOG(info):     """ Log files ...."&