我家里有一台 Ubuntu 10.04 台式机,全天候运行。最近,我注意到这台机器偶尔会自行重启(大约每月一次)。我想设置这台服务器,以便每次服务器启动时我都能收到一封电子邮件。我想在我的 gmail 帐户中收到电子邮件,我将为服务器设置另一个 gmail 帐户,以便用于发送电子邮件(如有必要)。
另外一个好处是,如果电子邮件可以包含有关导致服务器崩溃和重启的原因的某种诊断信息,那就太好了。
谢谢
答案1
我看到至少两种可能的选择:
- 添加新的 cronjob(例如 @reboot root mail -s“我刚刚重启”[电子邮件保护]
- 安装 logcheck;它将向您发送包含重启原因的日志消息(如果有关于它们的任何日志条目)
答案2
很难追踪计算机崩溃和重启的原因,但您可以使用通知电子邮件通过电子邮件发送日志。对于高级监控,我建议尝试使用 Zabbix、NagiOS 或 Cacti。但是,这里有一个简单的 Python 2.7 脚本,用于使用命令“./script.py username_for_gmail path_to_letter”发送电子邮件:
#!/usr/bin/python2.7
import smtplib
import getopt
import sys
args = getopt.getopt(sys.argv[1:], ":")
laiskas = args[1][1]
SENDER = "no-reply@" + args[1][0]
mssg = open(laiskas, 'r').read()
RECIPIENTS = ['[email protected]']
server = smtplib.SMTP('smtp.gmail.com',587)
#server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.ehlo()
server.login(args[1][0] + "@gmail.com","R7olM6Qw")
server.sendmail(SENDER,RECIPIENTS,mssg)
server.quit()
您必须将 R7olM6Qw 更改为您自己的 GMail 密码。另外,请将 RECIPIENTS 变量更改为您的地址。该脚本需要 smtplib 和 python2.7,可能需要通过 apt 在您的服务器上安装它们。
然后您可以在脚本旁边创建一个简单的文本文件:
To: [email protected]
From: [email protected]
Subject: Computer powered on!
Random text here...
最后,只需在 /etc/rc.local 文件中添加一行新行:
/path/to/the/python/script gmail_username /path/to/the/letter
但是,这种方法并不安全,因为您将不安全地存储密码,因此我建议为此创建一个邮箱。另外,请注意并对所有脚本进行 chmod 以防止其他用户对它们进行任何操作。
相反,我认为更合理的做法是使用单独的服务器,其中的 PHP 邮件脚本仅供服务器 IP 使用。在这种情况下,单独的服务器将安全地执行邮件服务,而其他服务器仅使用 curl 或 wget 来推送通知。
答案3
#!/bin/sh
EMAIL="[email protected]"
SUBJECT="[$HOSTNAME] - System $1"
if [ "$1" = startup ]
then
ACTION="started successfully"
else
ACTION="is shutting down"
fi
# a printf format string to simplify a long body
BODY="This is an automated message to notify you that %s %s.\nDate and Time: %s\n"
printf "$BODY" "$HOSTNAME" "$ACTION" "$(date)" | mail -s "${SUBJECT}" "${EMAIL}"
将其保存为 /usr/local/bin/bootmail.sh,使其可执行,等等。
然后,要创建 systemd 服务,请在 /etc/systemd/system 中创建一个扩展名为 .service 的文件(例如,/etc/systemd/system/bootmail.service),其中包含:
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/bin/bootmail.sh startup
ExecStop=/usr/local/bin/bootmail.sh shutdown
[Install]
WantedBy=multi-user.target
Now, do:
systemctl daemon-reload
systemctl enable bootmail.service
现在,您应该在启动和关闭时收到邮件(假设邮件配置正确等)。