LINUX.ORG.RU

Что именно прописано в /etc/rc.local и при запуске с командной строки этого файла какой у него exit code?

mky ★★★★★
()

Это udev-правилом нужно делать, а не в rc.local пихать.

И да, телепаты в отпуске. Приведи скрипт и вывод systemctl status rc-local.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

iwconfig wlan0 rate 5.5M fixed

 rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static)
   Active: failed (Result: exit-code) since Чт 2015-05-14 18:17:44 MSK; 38s ago
  Process: 436 ExecStart=/etc/rc.local start (code=exited, status=250)

в Wheezy работало.

sholmes
() автор топика
Ответ на: комментарий от sholmes

А следующие строчки? Лог юнита.

Так или иначе, скрипт твой запускается, а 250 — это ровно то, что возвращает последняя команда в скрипте.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx
#!/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.
iwconfig wlan0 rate 5.5M fixed
exit 0
sholmes
() автор топика
Ответ на: комментарий от sholmes

Ну смотри.

У тебя скрипт выполняется с set -e. Это означает, что первая сфейлившаяся команда фейлит скрипт. В твоём случае это означает, что iwconfig не сработал.

Поскольку лог (последние сколько-то там строчек вывода systemctl) ты не привёл, о причинах фейла остаётся лишь гадать. Наверное, дело в том, что этот скрипт выполняется до обнаружения и/или полной инициализации сетевого адаптера. Если это так, то проблему можно решить выкидыванием этой команды из rc.local и написанием udev-правила. Конкретно:

/etc/udev/rules.d/99-wlan0-rate-fixed.rules

ACTION!="remove", SUBSYSTEM=="net", KERNEL=="wlan0", RUN+="/usr/bin/iwconfig %k rate 5.5M fixed"

/usr/bin/iwconfig нужно заменить на путь до iwconfig на твоей системе — он может быть другим (which iwconfig).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от sholmes

journalctl -b. Если журнал не включен — то не знаю.

intelfx ★★★★★
()
Ответ на: комментарий от sholmes

Сообщения об ошибках iwconfig, разумеется.

Нет, проблемы отнюдь не в systemd. Только что проверил в своей конфигурации — всё работает, как и должно.

intelfx ★★★★★
()
18 июня 2015 г.
Ответ на: комментарий от intelfx

не могли бы вы посмотреть на мою точно такую же проблему

pmpo@Arch-PC ~]$ sudo systemctl status rc-local.service
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/usr/lib/systemd/system/rc-local.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Ср 2015-06-17 18:34:22 EEST; 4min 43s ago
Process: 223 ExecStart=/etc/rc.local start (code=exited, status=203/EXEC)

июн 17 18:34:21 Arch-PC systemd[1]: Starting /etc/rc.local Compatibility…
июн 17 18:34:21 Arch-PC systemd[223]: Failed at step EXEC spawning /etc/r…r
июн 17 18:34:22 Arch-PC systemd[1]: rc-local.service: control process ex…03
июн 17 18:34:22 Arch-PC systemd[1]: Failed to start /etc/rc.local Compat…y.
июн 17 18:34:22 Arch-PC systemd[1]: Unit rc-local.service entered failed…e.
июн 17 18:34:22 Arch-PC systemd[1]: rc-local.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

пытаюсь выполнить команду
setkeycodes e016 188
exit 0

ForumLiker
()
Ответ на: комментарий от ForumLiker

Добавь к команде systemctl status параметр -l — а то строчки лога у тебя обрезаны до ширины терминала.

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

#!/bin/bash

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

несколько дней борюсь с этой проблемой, а здесь вы ответили и при вводе в терминал команду с параметром -l о чудо, все работает. перезагрузил систему...и все шикарно как и нужно.

 Active: active (exited) 

проблема решилась как то сама по себе

ForumLiker
()
12 мая 2016 г.
Ответ на: комментарий от intelfx

В первой строчке скрипта должен быть такой текст:

Зачем ? В каком месте тут bash !? Это банальный вызов /bin/setkeycodes. Но да, действительно, помогает. Поразительная логика, брависсимо. А ведь работало ещё не так давно и без «#!/bin/bash». Вот, тоже нарвался...

AS ★★★★★
()
Ответ на: комментарий от AS

Ты демонстрируешь незнание того, как устроен Linux. Текстовый файл нельзя «просто так запустить на выполнение». В ядре нет понятия «текстового файла со списком команд».

Раньше работало, потому что в bash есть костыль на этот счёт: если пользователь пытается запустить текстовый файл, то считать этот текстовый файл bash-скриптом. Сейчас не работает, потому что в systemd такого костыля нет — он просто передаёт путь к файлу в системный вызов exec().

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Ты демонстрируешь незнание того, как устроен Linux.

Отнюдь.

> Текстовый файл нельзя «просто так запустить на выполнение».

Если он исполняемый, то можно: шелом по-умолчанию. И так всегда и было. Но разработчикам systemd виднее, понимаю. Ещё раз подчёркиваю: оно, даже, работало в systemd не так давно. Но выпилили.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

Если он исполняемый, то можно: шелом по-умолчанию. И так всегда и было.

Нет. RTFM (execve(2)). Такой логики в ядре нет.

Но разработчикам systemd виднее, понимаю.

Я осведомлён о твоём желании во что бы то ни стало кинуть в них говном, но в данном случае это желание совершенно безосновательно.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Такой логики в ядре нет.

При чём тут ядро ?

Я осведомлён о твоём желании во что бы то ни стало кинуть в них говном

Так регулярно же повод дают, что поделать.

AS ★★★★★
()
Ответ на: комментарий от AS

При том, что ядро непосредственным образом участвует в запуске исполняемых файлов, и если (как ты говоришь) некоторое поведение «всегда было», то, следовательно, его реализация должна находиться именно в ядре.

Но её там нет — стало быть, ты говоришь неправду. Так или иначе, это поведение скорее всего является костылём конкретно bash'а, и ничто не обязывает systemd эмулировать такой костыль. Или другими словами: в цепочке «юниты-скрипт-systemd-ядро» нигде не указано, что данный текстовый файл нужно запускать именно как шелл-скрипт.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Ответ на: комментарий от intelfx

При том, что ядро непосредственным образом участвует в запуске исполняемых файлов,

Причём бинарных, да ? Только, раньше ядра, это делает init. Или ты хочешь сказать, что «#!» в первой строке текстовика обрабатывает ядро ?

AS ★★★★★
()
Ответ на: комментарий от AS

Или ты хочешь сказать, что «#!» в первой строке текстовика обрабатывает ядро ?

Представь себе. Я для чего тебе ссылку на ман скинул?

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Представь себе. Я для чего тебе ссылку на ман скинул?

Хм. Ну ладно, ядро умеет, удивил. Но, ещё раз, при чём тут ядро ? Разработчики systemd, решив сделать из init кофеварку, забили на обычное поведение sysvinit ?

AS ★★★★★
()
Ответ на: комментарий от AS

Блин, ты какой-то образцовый: и врешь, и невежество выпячиваешь, и ответы не читаешь, и, естественно, винишь во всем systemd.

Чтобы скрипт запустился интерпретатором, надо писать shebang. Для тех, кто не пишет shebang, заготовлен не только специальный котел в аду без воды, но еще и костыли, чтобы подразуметь там шелл. Такой костыль есть в bash, есть в sysvinit. В systemd его нет, и винить их в этом крайне сложно.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

хотя я и сам немного наврал. почитал init.c:spawn. там не только ад и 5.3, там еще и невнятная проверка команды на волшебные символы, захардкоженный '/bin/sh', применяемый в случае фейла с ENOEXEC и цикломатическая сложность 46.

t184256 ★★★★★
()
Ответ на: комментарий от AS

Описанное тобой поведение является bash-специфичным костылём. Оно имеет место, когда ты из bash-скрипта запускаешь другой bash-скрипт (без шебанга). Поскольку systemd — не bash, логично, что этого костыля в systemd нет.

А ядро при том, что вся логика по исполнению исполняемых файлов находится именно там.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Поскольку systemd — не bash, логично, что этого костыля в systemd нет.

По скольку systemd заменяет классический init, то эта поделка должна обеспечить совместимость. И bash там не при чём, кстати: это будет работать в любом sh. А наличие sh, как бы, подразумевается.

AS ★★★★★
()
Ответ на: комментарий от AS

По скольку systemd заменяет классический init, то эта поделка должна обеспечить совместимость.

Bug-to-bug compatibility? Нет, никто не должен.

А наличие sh, как бы, подразумевается.

Кем?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от AS

Так говоришь, как будто у тебя обоснованная и взвешенная позиция, а не «я не разбираюсь в теме — да и зачем? виноват же по-любому поттеринг».

Еще раз: твой файл сломан. То что он не исполняется — правильно. Если ты с этим не согласен — пиши патч к execve&friends или прямо к ядру. Будешь проталкивать — кастани и дай ссылку, поржем.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Еще раз: твой файл сломан.

Нет.

Если ты с этим не согласен — пиши патч к execve&friends

Проще забить на systemd. Но врага надо знать в лицо, потому чуть-чуть пользуюсь. :-)

AS ★★★★★
()
Ответ на: комментарий от AS

Нет.

Я обосновал, почему он сломан: это вроде бы скрипт, но без shebang => запускаться он не должен.

Ты обоснуешь, почему называешь его несломанным? Это, вообще-то, нарушает правила форума.

Проще забить на systemd.

Ну вот, тогда из-за тебя линукс останется сломанным — ты прошел мимо и ничегошеньки не сделал. Не стыдно?

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.