Как запустить сценарий оболочки перед выключением на 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)
Двухзначная цифра указывает порядок выполнения вашего скрипта, причем наименьшим номером будет выполняться первый.