У меня был скрипт, который автоматически включает мой 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:
-
создайте файл сценария, например
disable_cdrom
в удобном для вас месте. В моем случаеhome/yterle/disable_cdrom
. В моем случае:#!/bin/sheject /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=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