我需要为客户创建AWS CentOS 7实例映像,并需要它在每次实例启动时自动将ip和实例id发送到我们的AWS服务器。例如,下面是我需要运行的脚本的最基本的测试版本:
#!/bin/bash
$serverIP=""
curl "https://$serverIP"/myphp.php?id='sentid'&ip='sentip'"
如果脚本是直接运行的,它可以正常工作,并被服务器接收和处理。但是我不能让它在启动时运行。我无法将脚本放入"用户数据"中。直接出于安全考虑,因为客户可以很容易地看到它,它需要在映像文件系统中的脚本中。
我尝试了一些在物理Linux服务器上运行良好的东西,但在AWS上却不行。我知道侧写。每次有人登录时D都会运行,但是像这样的过度发送是可以的。
/etc/profile.d/myscript.sh这将阻止AWS实例启动。即使只是
#!/bin/bash/
echo "hello world"
阻止它启动。实例启动了,但是当你用ssh进入它的时候,你得到'Network Error: connection timed out',这是如果你输入了错误的ip,或者留下一个像httpd这样的服务使其启用时的标准错误。
但是,一个只包含#!的空白bash脚本/bin/bash将允许实例启动。通过用户数据删除脚本通常使其启动,有时它只是死亡。
我尝试的第一件事是crontab。我:
crontab -e
@reboot /var/ook/myscript.sh
systemctl enable crond.service
但是实例无法启动。所以我输入"systemctl disable crond。service"在用户数据中,一个启动,但另一个仍然处于死亡状态。Myscript.sh只是另一个回声"在比;
直接运行时工作正常的文件。我试着投入/etc/systemd/system/my-startup.service:
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/var/ook/writedood.sh
[Install]
WantedBy=multi-user.target
:
systemctl enable my-startup.service
但这没有任何作用。我的剧本"写得好"。只是echo "doob"在比;./file.txt确保file.txt为chmod 777。至少它没有阻止实例启动。
为了说明上下文,如果httpd在关机时保持启用,则实例不会启动,但如果在用户数据中禁用它,则会启动。
我想尝试在init中放入一些东西。d但我不确定如何简单地告诉它在后台运行一个脚本一次,并给予过多的成功到目前为止我已经与实例不重启,我不希望,大部分工作。
提前感谢!
编辑:::我意识到,有时AWS EC2实例控制台导致的问题,我不能在停止和启动后ssh。当我点击停止时,它会空白公共ipv4地址,但当我开始时,它会显示旧地址并挂起。如果我刷新页面,或者取消选中/选中实例;IP地址变为新地址。这引起了很大的恐慌。
如果我将脚本和输出文件放在不同的文件夹中,则Crontab可以工作。它非常挑剔;如果出现任何错误,例如无法写入输出文件,则实例将无法启动。我把startscript.sh
放在/usr/local/src
中,把output.out
放在/tmp/
中,以确保没有权限问题,现在实例启动并在引导时运行脚本。
然后我意识到,有时候AWS EC2实例控制导致的问题,我不能停止和启动后ssh。当我点击停止时,它会空白公共ipv4地址,但当我开始时,它会显示旧地址并挂起。如果我刷新页面,或者取消选中/选中实例;IP地址变为新地址。这引起了很大的恐慌。