Как запустить скрипт во время загрузки как 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:
создать файл сценария тура, как
disable_cdrom
в удобном для вас месте. В моем случаеhome/yterle/disable_cdrom
, В моем случае:#!/bin/sh eject /dev/sr0 -i 1
сделать его исполняемым
chmod 775 disable_cdrom
- перейдите к
/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. Но так как у меня недостаточно представителей, я не мог комментировать или голосовать за его ответ.