我在服务器启动时使用该文件执行一些脚本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