首次启动时运行脚本

我想创build一个只能在第一次启动时运行的脚本,而不会再次运行。 我正在研究一个将在模板上进行转换的虚拟机,所以我想确保我可以创build一个脚本,可以在服务器启动时自动运行。

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

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

/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 

任何帮助深表感谢

你可以用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 ,这也可以得心应手。

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

脚本可以在/etc/init.d中,但是你必须initctl reload-configuration或者你可以把脚本放在你想要的地方,然后echo "/path/to/yourscript start &" >> /etc/rc.local

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

或者,如果您希望脚本被删除,请使用rm $0 。 如果您selectinitctl方式,请使用rm $0 && initctl reload-configuration来取消。