云服务器上运行python程序/shell脚本——定时发送邮件

前言

用python代码实现了发送【自定义内容】邮件,初始目的:通过每日定时发送邮件提醒~~(就是个备忘录)~~;后续目的:通过爬虫,定时爬取一定的咨询,通过邮件发送(基于云服务器)

为了实现这样的想法,需要做的准备

  1. python代码文件
  2. 云服务器+配置好python等环境~~(无非安装python和一些列的pip)~~
  3. 稍微了解crontab、sh脚本文件的相关知识

具体的实现

方法一

先说简单的方法后来才注意到的

如果使用的云服务器有宝塔镜像系统,那一切都简单

  1. 将python文件上传到云服务器的文件夹中,如:
    在这里插入图片描述

  2. 在宝塔系统界面,点击左侧的计划任务,并在任务类型中选择Shell脚本:
    在这里插入图片描述

  3. 确定名称、执行周期,最后在脚本任务中输入:python /www/xxx/Mail.py

  4. 【解释】python /绝对路径/xxx.py就执行python程序

方法一就是这么直接简单,它会自动在系统中生成crontab相关的信息与日志~~(但是不用管)~~

下面介绍手动添加配置信息,实现云服务器crontab定时任务

方法二

基本原理
云服务器上实现定时运行python任务:

  • 核心是用Python运行py文件
  • 不同的py文件运行所需的虚拟环境、库的配置可能都不一样,因此需要sh脚本文件
  • 脚本文件中,在python xxx.py前后,可能就需要active虚拟环境、打开路径等操作
  • Linux系统能实现定时执行任务,需要的是crontab
  • crontab能直接执行简单的语句命令,也能通过运行sh脚本文件执行繁复的语句命令

踩坑事项

  • crontab的配置文件修改:通过指令打开修改;找到配置文件进行vi修改。后者很肯能因为权限问题而修改不成功

所用得到的指令

  • service crond start //启动服务
  • service crond stop //关闭服务
  • service crond restart //重启服务
  • service crond reload //重新载入配置
  • service crond status //查看服务状态
  • tail -f -n 200 /var/log/cron //查看日志信息,判断运行情况
  • crontab -u //编辑文件内容
  • crontab -l //显示文件内容

实际操作(用的笨方法

  1. 输入crontab -e打开文件进行编辑
    【注】打开的是 /var/spool/cron/root文件,不同的系统可能不一样
  2. 添加定时任务,所需执行的语句命令
    如下图中的第‘2’行所示,此为方法一中添加计划任务时自动添加的信息
    在这里插入图片描述
    这里仿照进行了编写‘3’,保存退出
    【解释】‘>>’前的路径是指所执行的文件,‘>>’后的指将执行结果生成日志保存入.log中
    【注】踩得坑就是手动打开root文件进行添加,保存后并不起作用,crontab -e编辑的就行
  3. 在2中路径下的‘testcreate’文件,打开后是:
    在这里插入图片描述
    【注】核心语句就只有一句python /绝对路径/xxx.py;如果是复杂命令可换成:bash /xxxx/xxxx/xxxx.sh
  4. 需要先自行创建‘testcreate’文件进行编辑
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
python /xxxx/xxxxxxx/xxxx/xxxx.py
echo "----------------------------------------------------------------"
endDate=`date +"%Y-%m-%d %H:%M:%S"`
echo "★[$endDate] Successful"
echo "---------------------------------------------------------------"
  1. 保存后,还需将‘testcreate’文件的权限改为750

至此完成

方法三

一般来说,通过crontab结合sh文件部署就OK,其他大佬都有千万要自行百度


版权声明:本文为weixin_43820324原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。