Domanda Inviami un'e-mail all'arresto del computer


Vorrei che il computer mi inviasse una e-mail ogni volta che si avvia o si spegne. ho trovato questo codice scritto per CENTOS e sto cercando di adattarlo ad Ubuntu.

Il codice è:

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

Dove il /lib/lsb/init-functions è diverso dal codice originale per essere compatibile con Ubuntu.

L'errore che sto cercando di eseguire è (il nome del file è mailme)

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

Cosa posso fare per far funzionare questo codice su Ubuntu? Le modifiche sono grandi?


0
2017-11-21 14:58


origine


Questo è il vecchio modo System V di usare gli script di sistema. Questo è stato sostituito da Upstart, che a sua volta è stato sostituito da systemd. Il termine "Unit mailme.service" è un omaggio che ti trovi su una versione systemd di Ubuntu. - Jos


risposte:


Dal tuo messaggio di errore, sembra che tu stia utilizzando una versione di Ubuntu che usa systemd. Penso che sarebbe più facile se separassi la parte di invio della posta in uno script separato e la eseguissi usando un servizio systemd.

Quindi, estraendo la parte di spedizione (e semplificandola):

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

Salva questo come, per esempio, /usr/local/bin/bootmail.sh, renderlo eseguibile, ecc.

Quindi, per creare un servizio systemd, creare un file in /etc/systemd/system con estensione .service (per esempio, /etc/systemd/system/bootmail.service) contenente:

[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

Ora, fai:

systemctl daemon-reload
systemctl enable bootmail.service

Ora, dovresti ricevere mail all'avvio e allo spegnimento (supponendo che la spedizione sia configurata correttamente, ecc.).


1
2017-11-21 15:26