首次启动时运行脚本

首次启动时运行脚本

我想创建一个只在第一次启动时运行、以后不再运行的脚本。我正在开发一个将在模板上转换的虚拟机,因此我想确保可以创建一个在服务器启动时自动运行的脚本。

我有一些线索,例如,我可以将脚本放在 /etc/init.d/firstboot 下,并使用 chkconfig 在 rhel 上执行此操作(这在 Ubuntu 上似乎不可用),但我需要在 Ubuntu 14 和 16 上执行此操作,有什么想法吗?——我可以假设如果我将脚本放在 /etc/init.d 下,它会在启动时运行吗?

我一直在谷歌搜索,但看到了很多不同的东西。例如,我看到了类似的东西:

/etc/init.d/yourscript:
#!/bin/bash
# chkconfig: 2345 9 20
# description: long description

case "$1" in
  start)
    Do your thing !!!
    chkconfig yourscript off
  ;;
  stop|status|restart|reload|force-reload)
    # do nothing
  ;;
esac

任何帮助深表感谢

答案1

你可以使用 systemd 启动你的脚本。编写一个 systemd 单元,如下所示:

[Unit]
Description=yourscript
ConditionPathExists=/path/to/some/file

[Service]
Type=oneshot
ExecStart=/path/to/yourscript

[Install]
WantedBy=multi-user.target

启用此单元后,它应该仅在文件ConditionPathExists存在时启动。您可以编写脚本以在运行后删除该文件。检查systemd.unit还有更多这样的检查,例如ConditionFileNotEmptyConditionDirectoryNotEmpty也可能很方便。

答案2

它不会在启动时运行,因为它位于 /etc/init.d/ 中。

该脚本可以位于 /etc/init.d 中,但是您必须这样做,initctl reload-configuration或者您可以将脚本放在您想要的位置echo "/path/to/yourscript start &" >> /etc/rc.local

然后,只需chmod -x $0在开始部分末尾添加,它就不会再执行。

或者,如果您希望删除脚本,请使用rm $0。如果您选择了 initctl 方式,请使用rm $0 && initctl reload-configuration来禁用。

相关内容