Назад | Перейти на главную страницу

Запускать скрипт при первой загрузке

Я хочу создать сценарий, который будет запускаться только при первой загрузке и никогда больше. Я работаю над виртуальной машиной, которая будет преобразована по шаблону, поэтому я хочу убедиться, что могу создать сценарий, который может запускаться автоматически при загрузке сервера.

У меня есть подсказки, что я могу поместить сценарий, например, в /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 вместо этого отключить.