Пошлите мне электронное письмо на компьютерном завершении работы

Я хотел бы, чтобы компьютер послал мне электронное письмо каждый раз, он запускается, или он закрывается. Я нашел этот код записанным для CENTOS и пытаюсь адаптировать его к Ubuntu.

Код:

#!/bin/sh
# chkconfig: 2345 99 01
# Description: Sends an email at system start and shutdown

#############################################
#                                           #
# Send an email on system start/stop to     #
# a user.                                   #
#                                           #
#############################################

EMAIL="email@email.com"
RESTARTSUBJECT="["`hostname`"] - System Startup"
SHUTDOWNSUBJECT="["`hostname`"] - System Shutdown"
RESTARTBODY="This is an automated message to notify you that "`hostname`" started successfully.

Start up Date and Time: "`date`
SHUTDOWNBODY="This is an automated message to notify you that "`hostname`" is shutting down.
Shutdown Date and Time: "`date`
LOCKFILE=/var/lock/subsys/SystemEmail
RETVAL=0

# Source function library.
. /lib/lsb/init-functions

stop()
{
echo -n $"Sending Shutdown Email: "
echo "${SHUTDOWNBODY}" | mail -s "${SHUTDOWNSUBJECT}" ${EMAIL}
RETVAL=$?

if [ ${RETVAL} -eq 0 ]; then
rm -f ${LOCKFILE}
success
else
failure
fi
echo
return ${RETVAL}
}

start()
{
echo -n $"Sending Startup Email: "
echo "${RESTARTBODY}" | mail -s "${RESTARTSUBJECT}" ${EMAIL}
RETVAL=$?

if [ ${RETVAL} -eq 0 ]; then
touch ${LOCKFILE}
success
else
failure
fi
echo
return ${RETVAL}
}

case $1 in
stop)
stop
;;

start)
start
;;

*)

esac
exit ${RETVAL}

Где /lib/lsb/init-functions отличается от исходного кода, чтобы быть совместимым с Ubuntu.

Ошибка я получаю попытку выполнить это, (название файла mailme)

Unit mailme.service failed to load: No such file or directory

Что я могу сделать, чтобы этот код работал на Ubuntu? Действительно ли модификации являются большими?

0
задан 21 November 2016 в 18:07

1 ответ

Из Вашего сообщения об ошибке кажется выполнением версии Ubuntu, которая использует systemd. Я думаю, что было бы легче, если бы Вы выделили отправляющую почту часть в отдельный сценарий, и выполните его с помощью systemd сервиса.

Так, вынимая почтовую часть (и упрощение его):

#! /bin/sh
EMAIL="email@email.com"
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

Теперь, сделайте:

systemctl daemon-reload
systemctl enable bootmail.service

Теперь, необходимо получить письма на запуске и завершении работы (предполагающий, что отправка по почте настроена правильно, и т.д.).

1
ответ дан 28 September 2019 в 03:28

Другие вопросы по тегам:

Похожие вопросы: