我想创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还有更多这样的检查,例如ConditionFileNotEmpty或ConditionDirectoryNotEmpty ,这也可以得心应手。
它不会在启动时运行,因为它在/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来取消。