Как запустить скрипт во время загрузки от имени root

У меня был скрипт, который автоматически включает мой Wi-Fi без использования networkmanager, но я не знаю, как запустить скрипт от имени root во время загрузки системы. Как мне заставить скрипт запускаться автоматически во время загрузки?

Поместите скрипт, который вы хотите запустить, в каталог /etc/init.d и сделайте скрипт исполняемым.

chmod 755 myscript

Как только это будет сделано, создайте символическую ссылку в каталоге уровня выполнения, который вы хотели бы использовать, например, если вы хотите запустить программу на графическом уровне выполнения 2, уровне выполнения по умолчанию для Ubuntu, вы должны поместить ее в /etc/rc2.d каталог. Вы просто не можете поместить его в каталог, вы должны указать, когда он будет запущен, указав запуск с помощью буквы “S”, и порядок выполнения важен. Поместите его после всего остального, что есть в каталоге, присвоив ему более высокий номер.

Если последний сценарий, который должен быть запущен, является rc.local и это называется S99rc.local затем вам нужно добавить свой скрипт как S99myscript.

ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript

Каждая обратная совместимость /etc/rc*.d каталог содержит символические ссылки на /etc/init.d/ каталог.

Используйте crontab возможность запустить ваш скрипт после перезагрузки,

вы можете сделать это, добавив @reboot код в cron

Откройте crontab пользователем root:

$ sudo crontab -e

Добавьте следующую запись внизу:

@reboot yourScriptPath 

Это сделает то, что вы хотите.

Включите команду в /etc/rc.local. Он будет запускаться всякий раз, когда изменяется уровень выполнения пользователя.

Примечание: Вы должны поместить команду перед последней строкой в /etc/rc.local, которая содержит: "exit 0".

Это сработало для меня в Ubuntu 17.04:

  1. создайте файл сценария, например disable_cdrom в удобном для вас месте. В моем случае home/yterle/disable_cdrom. В моем случае:

    #!/bin/sheject /dev/sr0 -i 1
  2. сделайте его исполняемым chmod 775 disable_cdrom

  3. перейдите к /etc/systemd/system и создать там service файл.Например sudo gedit /etc/systemd/system/disable_cdrom.service

Мой disable_cdrom.service выглядит так:

[Unit]Description=Disable cdrom[Service]Type=oneshotExecStart=/bin/sh /home/yterle/disable_cdrom[Install]WantedBy=multi-user.target

Где ExecStart указывает на запуск вашего скрипта с помощью /bin/sh

Затем беги systemctl enable disable_cdrom.service чтобы включить службу systemd

Включите свой файл скрипта в /etc/init.d/с разрешением исполняемого файла затем установите другой уровень запуска

$ update-rc.d script-name default

Это приведет к запуску вашего скрипта при загрузке.

Создайте текстовый файл, подобный этому, в /etc/cron.d/:

SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin@reboot   root    yourScriptPath

(Вы должны заменить yourScriptPath с указанием пути к скрипту, который вы хотите запустить.)

Будьте осторожны с добавлением скрипта в rc.local - Из-за этого я застрял на заставке. Прессование Alt+F1 показал, что происходило за заставкой (сценарий в rc.local бежал).

Я не мог из этого выбраться.

  • Ctrl+Alt+Del или
  • Alt+PrtSc+K или
  • Ctrl+Alt+F#

ничего не работает.

Мне пришлось загрузиться с USB-образа Ubuntu, найти rc.local, даю себе права доступа к файлу и удаляю его. Я думаю, вам не следует ничего делать, если вы не знаете, что делаете.

Программы автозапуска настраиваются в манифестах “автозапуск” или в файлах “*.service” в нескольких местах, а также в “init.d” или "crontab`. Посмотрите на это: upstart - How to start application after login on CentOS? - Unix & Linux Stack Exchange