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

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

8 ответов

Решение

Поместите скрипт, который вы хотите запустить, в каталог /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

@reboot yourScriptPath 

сделаю это

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

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

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

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

    #!/bin/sh
    eject /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=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom

[Install]
WantedBy=multi-user.target

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

Тогда беги systemctl enable vgaoff.service включить службу systemd

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

$ update-rc.d script-name default

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

Создайте такой текстовый файл в /etc/cron.d/:

SHELL=/bin/sh
PATH=/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, дайте себе разрешения на файл и удалите его. Я думаю, что вы не должны делать вещи, если вы не знаете, что делаете.

Вы можете создать службу под systemd. Таким образом, ваш скрипт будет запускаться как sudo автоматически.

Предполагая, что у вас есть сценарий /path/to/script/my_amazing_script.shкоторый вы хотите запускать при каждой загрузке с правами root:

Убедитесь, что только root может работать с этим:

chmod 0700 /path/to/script/my_amazing_script.sh

Затем создайте служебный файл и начните его редактирование:

sudo nano /etc/systemd/system/run_amazing_script.service

Поместите это в файл:

      [Unit]
Description=Run the best script ever

[Service]
ExecStart=/path/to/script/my_amazing_script.sh

[Install]
WantedBy=multi-user.target

Убедитесь, что служба работает нормально, запустив ее один раз:

sudo systemctl запустить run_amazing_script.service

Проверьте журнал:

sudo journalctl -u run_amazing_script.service

Если вы довольны запуском, включите его, чтобы он запускался при каждой загрузке:

sudo systemctl включить run_amazing_script.service

И если вы хотите, чтобы он не запускался при каждой загрузке, вы можете отключить его:

sudo systemctl отключить run_amazing_script.service

Примечание: это решение очень похоже на то, что опубликовал YTerle. Но так как у меня недостаточно представителей, я не мог комментировать или голосовать за его ответ.

Другие вопросы по тегам