Файл rc.local отсутствует в Kubuntu 18.04 [duplicate]

Я устанавливаю квоту на моем сервере Linode, на котором запущен Ubuntu 16.10, и я получаю следующую ошибку: Can not stat () установленное устройство / dev / root: нет такого файла или каталога

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

ln -s /dev/xvda /dev/root /etc/init.d/quota restart

к /etc/rc.local. Но Ubuntu 16.10 больше не использует rc.local, а использует этот поток . Какова альтернатива для rc.local, Как я могу запустить указанные выше команды при запуске?

Также я включил службу с помощью systemctl enable rc-local.service, но для меня это не сработало. Любое руководство было бы оценено.

29
задан 23 February 2017 в 22:55

8 ответов

Intro

Я думаю, вам не следует создавать новую услугу, как предлагается в ссылке Джорджа. [F4] уже существует в systemd, и файл службы предполагает, что rc.local, если он существует и является исполняемым, автоматически извлекается в multi-user.target. Поэтому нет необходимости воссоздавать или заставлять что-то, что было сделано другим способом с помощью systemd-rc-local-generator.

Одно решение

Быстрое обходное решение (я не знаю, каков ли это канонический путь):

В терминале do:

printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local sudo reboot

После этого rc.local будет вызван при запуске системы. Вставьте то, что вы хотите.

Фон

Если вы делаете в терминале:

sudo systemctl edit --full rc-local

Вы можете видеть, что комментарий главы содержит строки, такие как: [ ! d9] # This unit gets pulled automatically into multi-user.target by # systemd-rc-local-generator if /etc/rc.local is executable.

Это указывает на то, что в этой системе, если есть файл с именем /etc/rc.local, который является исполняемым, тогда он будет автоматически вставляться в multi-user.target. Поэтому вы просто создаете соответствующий файл (sudo touch...) и делаете его исполняемым (sudo chmod +x ...).

29
ответ дан 17 July 2018 в 15:29

Intro

Я думаю, вам не следует создавать новую услугу, как предлагается в ссылке Джорджа. [F4] уже существует в systemd, и файл службы предполагает, что rc.local, если он существует и является исполняемым, автоматически извлекается в multi-user.target. Поэтому нет необходимости воссоздавать или заставлять что-то, что было сделано другим способом с помощью systemd-rc-local-generator.

Одно решение

Быстрое обходное решение (я не знаю, каков ли это канонический путь):

В терминале do:

printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local sudo reboot

После этого rc.local будет вызван при запуске системы. Вставьте то, что вы хотите.

Фон

Если вы делаете в терминале:

sudo systemctl edit --full rc-local

Вы можете видеть, что комментарий главы содержит строки, такие как: [ ! d9] # This unit gets pulled automatically into multi-user.target by # systemd-rc-local-generator if /etc/rc.local is executable.

Это указывает на то, что в этой системе, если есть файл с именем /etc/rc.local, который является исполняемым, тогда он будет автоматически вставляться в multi-user.target. Поэтому вы просто создаете соответствующий файл (sudo touch...) и делаете его исполняемым (sudo chmod +x ...).

29
ответ дан 23 July 2018 в 16:25

Я видел это решение, которое предполагает использование systemd здесь:

Создайте службу: sudo vi /etc/systemd/system/rc-local.service Добавьте свой код там: [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target Создайте и убедитесь, что /etc/rc.local выполним и добавляет этот код внутри него: sudo chmod +x /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. exit 0 Включить службу: sudo systemctl enable rc-local Запустить сервис и проверить статус: sudo systemctl start rc-local.service sudo systemctl status rc-local.service Если все пойдет хорошо, вы можете добавить свой code в файл /etc/rc.local, а затем перезапустить его.

Примечание: проверено на Lubuntu 16.10.

Источник:

здесь

13
ответ дан 17 July 2018 в 15:29

Чтобы добавить к ответу Яна, что, в отличие от обычного файла rc.local, rc-local service выполняется не после того, как все службы были запущены, но после выхода сети в сеть.

В некоторых случаях вы можете хотите запустить команды из rc.local позже. Например, я хотел, чтобы он выполнялся после запуска lxd.

В этом случае вы можете отредактировать зависимостей запуска rc-local service, создав вставной файл conf: /etc/systemd/system/rc-local.service.d/override.conf с содержимым:

[Unit] After=network.target lxd.service

Где вы можете добавить нужное имя устройства (например, я добавил lxd.service)

После этого не забудьте systemctl daemon-reload.

0
ответ дан 17 July 2018 в 15:29

Я видел это решение, которое предполагает использование systemd здесь:

Создайте службу: sudo vi /etc/systemd/system/rc-local.service Добавьте свой код там: [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target Создайте и убедитесь, что /etc/rc.local выполним и добавляет этот код внутри него: sudo chmod +x /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. exit 0 Включить службу: sudo systemctl enable rc-local Запустить сервис и проверить статус: sudo systemctl start rc-local.service sudo systemctl status rc-local.service Если все пойдет хорошо, вы можете добавить свой code в файл /etc/rc.local, а затем перезапустить его.

Примечание: проверено на Lubuntu 16.10.

Источник:

здесь

13
ответ дан 23 July 2018 в 16:25
  • 1
    Я сделал все шаги. У меня есть rc.local с: touch "hello" перед exit 0. Служба, похоже, активна, но не создает файл в / etc / dir. Выполняется на ubuntu 16.04 Arabian 5.31 – Danny182 13 October 2017 в 21:40
  • 2
    Как указывает @Jan, создание совершенно новой услуги не требуется, поскольку systemd уже поддерживает rc.local. – TommyPeanuts 4 June 2018 в 09:29

Чтобы добавить к ответу Яна, что, в отличие от обычного файла rc.local, rc-local service выполняется не после того, как все службы были запущены, но после выхода сети в сеть.

В некоторых случаях вы можете хотите запустить команды из rc.local позже. Например, я хотел, чтобы он выполнялся после запуска lxd.

В этом случае вы можете отредактировать зависимостей запуска rc-local service, создав вставной файл conf: /etc/systemd/system/rc-local.service.d/override.conf с содержимым:

[Unit] After=network.target lxd.service

Где вы можете добавить нужное имя устройства (например, я добавил lxd.service)

После этого не забудьте systemctl daemon-reload.

0
ответ дан 23 July 2018 в 16:25
  • 1
    Добро пожаловать в Ask Ubuntu! Если вы хотите улучшить другой ответ, предложите отредактировать его. Если вы хотите представить частичную альтернативу, повторите или укажите части, которые являются одинаковыми (в случае изменения исходного ответа) и выделите различия. В любом случае не создавайте новый неполный ответ! Спасибо. – David Foerster 19 June 2018 в 19:05

Чтобы добавить к ответу Jan , что, в отличие от обычного файла rc.local, rc-local service выполняется не после запуска всех служб, а после выхода в сеть.

В некоторых случаях вам может понадобиться запустить команды из rc.local позже. Например, я хотел, чтобы он выполнялся после запуска lxd.

В этом случае вы можете отредактировать зависимостей запуска rc-local service, создав вставной файл conf: /etc/systemd/system/rc-local.service.d/override.conf с содержимым:

[Unit]
After=network.target lxd.service

Где вы можете добавить нужное имя устройства (например, я добавил lxd.service)

После этого не забудьте systemctl daemon-reload.

0
ответ дан 31 July 2018 в 18:14

Чтобы добавить к ответу Jan , что, в отличие от обычного файла rc.local, rc-local service выполняется не после запуска всех служб, а после выхода в сеть.

В некоторых случаях вам может понадобиться запустить команды из rc.local позже. Например, я хотел, чтобы он выполнялся после запуска lxd.

В этом случае вы можете отредактировать зависимостей запуска rc-local service, создав вставной файл conf: /etc/systemd/system/rc-local.service.d/override.conf с содержимым:

[Unit]
After=network.target lxd.service

Где вы можете добавить нужное имя устройства (например, я добавил lxd.service)

После этого не забудьте systemctl daemon-reload.

0
ответ дан 6 August 2018 в 17:45

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

Похожие вопросы: