$HOSTNAME 在 rc.local 脚本中返回空

$HOSTNAME 在 rc.local 脚本中返回空

我在服务器启动时使用该文件执行一些脚本rc.local(如建议的那样这个SQ答案

该脚本向我的地址发送一封电子邮件,通知我服务器已启动。

/etc/rc.local这是我的文件的内容:

#!/bin/sh -e
echo "The $HOSTNAME server has started" | mail -s "[$HOSTNAME] start up" [email protected]
exit 0

显然,[email protected]在实际脚本中被替换为正确的值

剧本在启动时执行正如预期的那样,我在收件箱中收到了一封电子邮件......但!正如标题所暗示的,没有$HOSTNAME被我的服务器的实际主机名替换;它只是空白。以下是我收到的电子邮件的详细信息:

Subject: [] start up
To: <[email protected]>
X-Mailer: mail (GNU Mailutils 3.4)
Message-Id: <[email protected]>
Date: Fri, 31 Jan 2020 14:20:16 +0100 (CET)
From: root <[email protected]>

The  server has started

注意空括号在主题中,以及内容之间The和之上的空间。server

您可能已经从内容中猜到了rc.local,我期望的是在主题和电子邮件内容中出现我的主机名。

我尝试直接从终端执行相同的命令,并且效果与预期完全一致。

由于某种原因,在启动时root通过文件执行命令时rc.local,它无法解析$HOSTNAME变量内容,而是不打印任何内容。

我尝试$HOSTNAME$(hostname -f)或甚至替换$(head -n1 /etc/hostname),但结果完全相同:收到的邮件中没有主机名……

我在这里遗漏了什么?


编辑:

我临时将值硬编码到rc.local脚本中。因此命令如下所示:

echo "The server.example.com server has started" | mail -s "[server.example.com] start up" [email protected]

在这种情况下,当服务器重新启动时,我会像往常一样收到电子邮件,内容也符合预期……但主题仍然是“[] 启动”

考虑到我对括号内的值进行了硬编码,这怎么可能呢?这个[]符号是否有我不知道的特殊含义?

答案1

根据这个答案你面临的问题是 sudo 安全策略

尝试使用 -E 标志执行脚本:sudo -E startup_mail.sh

如果这不起作用,请尝试使用 env 参数运行:sudo -E env "HOSTNAME=$HOSTNAME" ./startup_mail.sh

相关内容