1.编写python脚本shutdown_msg.py
本人的shutdown_msg.py
文件放置在目录/home/zml/etc/shutdown_msg.py
下,此文件可放置于任意目录
# -*- coding: utf-8 -*-
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr, parseaddr
import datetime
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, "utf-8").encode(), addr))
def mail(
sender="zmlyzml@qq.com",
password="", # 改为自己的密码
recipients=("zmlmail2021@163.com", ), # 可设置多个收件人
smtp_server="smtp.qq.com", #
port=465,
subject="Tsgzcpu001服务器已启动"
):
msg = MIMEMultipart()
msg["From"] = _format_addr("服务器管理员 <%s>" % sender)
msg["To"] = _format_addr("管理员 <%s>" % ", ".join(list(recipients)))
msg["Subject"] = Header(subject, "utf-8").encode()
now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
text = f"您主机名为Tsgzcpu001的CPU服务器由于不明原因关机了,于{now_time}成功重新启动,请前往控制台重新运行程序!"
msg.attach(MIMEText(text, "plain", "utf-8"))
server = smtplib.SMTP_SSL(smtp_server, port)
try:
server.login(sender, password)
server.sendmail(sender, list(recipients), msg.as_string())
logs = f"{sender} 给 {'; '.join(recipients)} 的邮件发送成功"
except smtplib.SMTPException:
logs = "Error: 无法发送邮件"
finally:
server.quit()
return logs
# ubuntu设置关机时自动执行任务
if __name__ == '__main__':
logs = mail()
2.自定义服务
在/etc/systemd/system/
创建脚本文件mailshutdown.service
,可用命令:
vim /etc/systemd/system/mailshutdown.service
脚本文件的内容如下:
[Unit]
Description=Run command at boot up
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
ExecStartPre=/bin/sleep 10 # 设置10秒的延迟启动,避免因网络未准备好导致邮件发送失败
ExecStart=/usr/bin/python3 /home/zml/etc/shutdown_msg.py
# ExecStart需改为自己python的执行路径,可用which python 命令确定
# /home/zml/etc/shutdown_msg.py 需改为自己脚本的路径
[Install]
WantedBy=multi-user.target
3.加入开机启动
sudo systemctl daemon-reload
sudo systemctl start mailshutdown.service
sudo systemctl enable mailshutdown.service
4.测试与查看
重启系统:
sudo reboot
若发送识别,可查看日志,查明原因:
sudo systemctl status mailshutdown.service