Envie-me um email no desligamento do computador

0

Eu gostaria que o computador me enviasse um email toda vez que ele fosse iniciado ou desligado. Eu encontrei este código escrito para o CENTOS e estou tentando adaptá-lo ao Ubuntu.

O código é:

#!/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 protected]"
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}

Onde o /lib/lsb/init-functions é diferente do código original para ser compatível com o Ubuntu.

O erro que estou tentando executar é (o nome do arquivo é mailme )

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

O que posso fazer para este código rodar no Ubuntu? As modificações são grandes?

    
por gapolo 21.11.2016 / 15:58

1 resposta

1

Da sua mensagem de erro, parece que você está executando uma versão do Ubuntu que usa o systemd. Acho que seria mais fácil se você separasse a parte de envio de correspondência em um script separado e a executasse usando um serviço systemd.

Então, pegando a parte de correspondência (e simplificando):

#! /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}"

Salve isto como, digamos, /usr/local/bin/bootmail.sh , torne-o executável, etc.

Em seguida, para criar um serviço systemd, crie um arquivo em /etc/systemd/system com a extensão .service (por exemplo, /etc/systemd/system/bootmail.service ) contendo:

[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

Agora, faça:

systemctl daemon-reload
systemctl enable bootmail.service

Agora, você deve receber e-mails na inicialização e no desligamento (supondo que a correspondência esteja configurada corretamente, etc.).

    
por muru 21.11.2016 / 16:26