Linux 如何在CentOS上关闭前运行Shell脚本
我想在系统即将关闭时发送一封电子邮件,电子邮件ID为。我有CentOS 6.4。下面是我的脚本Linux 如何在CentOS上关闭前运行Shell脚本,linux,bash,shell,centos,runlevel,Linux,Bash,Shell,Centos,Runlevel,我想在系统即将关闭时发送一封电子邮件,电子邮件ID为。我有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 s
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
但脚本在关机期间不发送任何电子邮件。提前感谢。尝试为脚本设置可执行权限。有时你需要这样做来激活它
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
ln-s/etc/init.d/sendshtmail/etc/rc0.d/S01sendshtmail
符号链接名称应以S开头表示开始(K表示终止)
两位数字指定脚本的执行顺序,编号最低的是先执行。将shell脚本放入/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
最重要的是,只有当/var/lock/subsys文件夹中存在锁文件时,才会执行K00scriptname,所以请执行“touch/var/lock/subsys/scriptname”,然后通过关机进行检查。正如我在脚本拥有适当权限之前告诉您的那样。但是,我通过再次添加权限对其进行了双重检查。仍然不走运:(@tapasmishra请参阅更新。您也可以通过在脚本开头添加
set-x
来调试脚本。您至少应该看到脚本中执行的行。@tapasmishra在脚本开头添加set-x(在#!头之后)在执行脚本之前,您应该已经看到了脚本的行。如果没有,您的脚本可能根本没有运行(除非strr被rc系统抑制,这是不可能的)。如果它确实运行,但邮件仍然不起作用,请使用您看到的调试消息更新线程,以便人们可以对此给出想法。您是否可以在脚本开头定义路径,而不是使用命令的绝对路径@konsolebox@Saichovsky如果你指的是OP的例子,是的。但我不明白这是怎么回事这会有所不同。