Я хочу создать сценарий, который будет запускаться только при первой загрузке и никогда больше. Я работаю над виртуальной машиной, которая будет преобразована по шаблону, поэтому я хочу убедиться, что могу создать сценарий, который может запускаться автоматически при загрузке сервера.
У меня есть подсказки, что я могу поместить сценарий, например, в /etc/init.d/firstboot, и использовать chkconfig, чтобы сделать это на rhel (который, похоже, недоступен в Ubuntu), но мне нужно сделать это в Ubuntu 14 и 16 , Любые идеи? - могу ли я предположить, что если я помещу скрипт в /etc/init.d, он запустится при загрузке?
Я гуглил, но вижу много разных вещей. Например, я видел нечто подобное для 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
. Если вы выбрали способ initctl, используйте rm $0 && initctl reload-configuration
вместо этого отключить.