我正在设置一些服务器,这些服务器在我离开公司后基本上需要自行管理,因为我只是合同 IT 人员。管理这些服务器的人基本上应该能够在 ESXi 中克隆 VM 映像,并且在启动时需要自行配置。
我知道,您可能会说“使用 Puppet 或 Chef”或“使用 Docker”,嗯,这也是我的想法,但这显然对于这种设置来说太复杂了,他们采用“少即是多”的方法。
这些服务器需要有一个静态 IP 地址,因此我在想的是,当它第一次启动时,我可以让它通过 DHCP 获取 IP,然后重新配置文件/etc/sysconfig/network-scripts/ifcfg-enp0s3
,使用当前 IP 地址作为 DHCP,甚至可以变得非常花哨,比如测试它是否有效,如果不行,则恢复文件ifcfg-en0s3
,将其放在网络上,然后给某人发邮件说服务器需要一些人工关注,无论怎样都行。
上面的信息可能比您需要的要多,因为我只需要知道如何在第一次启动时运行一个脚本。将其添加到任何运行级别都会使它每次在该运行级别启动时执行。
我以为我可以将其置于运行级别 3,然后一旦它自行配置,只需删除文件夹中指向脚本的符号链接rc3.d
...但如果我找不到让它在“下次启动”时执行的方法,那这有点像我的备份选项。
我也考虑过只使用@reboot
cron 作业,但是它必须再次从 crontab 中删除。
如果有人能帮助我找到静态 IP 配置的其他解决方案,那很好,但我仍然需要知道在下次启动时(在指定的运行级别)启动脚本的最佳方法,因为它也需要用于其他任务。
谢谢!
附言我意识到让脚本执行诸如从 crontab 或 rc.d 目录中删除自身之类的操作并不是什么大问题,我只是觉得这是在胡乱操作,并且认为可能已经存在另一种方法,即在下次重新启动时执行一次的方法。但如果没有,那么前两种方法中的任何一种都可以
前列腺特发性硬化症我找到了类似的主题这里,它有一个脚本执行@reboot
,并检查指定目录中需要执行的任何文件/脚本,然后移动它们以禁用它们。我想那会起作用,我可能会做一些事情,比如将它们符号链接到目录,而不是移动文件本身,但如果那是最好的解决方案,那么它就足够了。(无论什么都能完成工作:-))
答案1
相当简单 - 将其添加为启动脚本 - 检查所有正常后脚本的最后一行等:
0 美元
答案2
在过去的十五年里,我为多个物理和虚拟存储设备编写了“firstboot”脚本,并且始终在成功完成首次启动后使用符号链接的“rm”,以确保它不会在未来的启动中运行。
另一种可能性是在完成首次启动后设置一个像“/FIRSTBOOT”这样的标记文件,然后在脚本顶部添加一行“if [ -f /FIRSTBOOT ] ; then ; exit 0 ; fi”。如果您需要再次重新配置虚拟机,这将提供删除标记文件并重新启动的选项,这对大多数人来说比将一个不起眼的文件符号链接到系统中某个不起眼的目录更容易。
您使用的是 Centos 7,因此您使用的是 systemd 而不是 SysV init。因此 sentinel 文件对您来说可能更简单。