Как запустить сценарий оболочки перед выключением на CentOS

Я хочу отправить электронное письмо, когда система будет выключена, на адрес электронной почты. У меня есть CentOS 6.4. Ниже мой сценарий.

cat /ect/init.d/sendshtmail

#!/bin/bash

EMAIL="example@example.com"
SHUTDOWNSUBJECT="["`hostname`"] - System Shutdown"


SHUTDOWNBODY="This is an automated message to notify you that "`hostname`" is shutting down.

LOCKFILE=/var/lock/subsys/SystemEmail
echo "${SHUTDOWNBODY}" | mutt -s "${SHUTDOWNSUBJECT}" ${EMAIL}

У него есть соответствующее разрешение. Пока он запускается вручную, он работает отлично. Я только что сделал ссылку на папку /etc/rc0.d/. Путем выдачи ниже команды.

 ln -s /etc/init.d/sendshtmail /etc/rc0.d/K00sendshtmail

Но скрипт не отправляет никаких писем во время выключения. Заранее спасибо.

3 ответа

Решение

Попробуйте установить исполняемые права доступа для вашего скрипта. Иногда вам нужно сделать это, чтобы активировать его.

chmod 755 /etc/init.d/sendshtmail

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

echo "${SHUTDOWNBODY}" | /usr/bin/mutt -s "${SHUTDOWNSUBJECT}" "${EMAIL}"

Другая попытка - переключить вашего пользователя на вашего текущего пользователя, например

echo "${SHUTDOWNBODY}" | su -l -c "/usr/bin/mutt -s \"${SHUTDOWNSUBJECT}\" \"${EMAIL}\"" yourusername

Поместите скрипт оболочки в /etc/init.d с разрешением на выполнение, и имя символической ссылки должно начинаться с K##. Если вы хотите выполнить свой скрипт на первом месте сразу после завершения работы, назовите его K00scriptname. Сценарий запускается, K будет выполняться сначала в порядке возрастания, затем сценарий с S.

ln -s /etc/init.d/script /etc/rc0.d/K00scriptname

Команда shutdown отправит сигнал остановки скрипту, ваш скрипт (K00scriptname) должен иметь функцию остановки, как в примере

stop()
{
  echo "executing scriptname"
  "Your script logic"
}
case "$1" in
  stop)
    stop
    ;;
esac

Самое главное, K00scriptname будет выполняться только в том случае, если в папке /var/lock/subsys будет присутствовать файл блокировки, поэтому выполните команду "touch /var/lock/subsys / scriptname", затем выполните выключение.

ln -s /etc/init.d/sendshtmail /etc/rc0.d/S01sendshtmail

Имя символической ссылки должно начинаться с S - для начала (K для Kill)

Двухзначная цифра указывает порядок выполнения вашего скрипта, причем наименьшим номером будет выполняться первый.

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