Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在CentOS上关闭前运行Shell脚本_Linux_Bash_Shell_Centos_Runlevel - Fatal编程技术网

Linux 如何在CentOS上关闭前运行Shell脚本

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

我想在系统即将关闭时发送一封电子邮件,电子邮件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 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的例子,是的。但我不明白这是怎么回事这会有所不同。