Как выполнить скрипт после того, как DHCP назначает IP-адрес при запуске?

У меня есть 4 ноутбука с 16.04, и все они немного отличаются от того, что GRUB принимает. Предпочтительным способом должно быть установка в /etc/default/grub

GRUB_GFXMODE=1920x1080x32

, после того, как знак равенства будет разрешен для вашего устройства. Используйте c в приглашении GRUB и введите vbeinfo или запустите sudo hwinfo --framebuffer с консоли в linux, чтобы получить список принятых режимов.

Иногда, даже если на экране есть 16:10 1920x1200 или подобное, принимается только разрешение 1600x1200, поэтому следите за этим. Это настройка для GRUB. Чтобы перевести его в систему загрузки, после этого используйте строку

GRUB_GFXPAYLOAD_LINUX=keep 

.

Для некоторых устройств эта (предпочтительная) опция не действует. Но для моих двух проблемных детей, комментируя строку GRUB_GFXMODE, сохранение строки GRUB_GFXPAYLOAD_LINUX и использование устаревшей опции vga= с nomodeset было достаточным:

GRUB_CMDLINE_LINUX_DEFAULT="nomodeset vga=0x35a quiet splash"

устанавливает tty в 1600x1200 с 24 бит. Используйте шестнадцатеричное значение sudo hwinfo --framebuffer.

1
задан 14 February 2018 в 04:14

2 ответа

Hooks

Существует множество возможностей, как это сделать.

Если вы хотите выполнить свой скрипт «после запуска DHCP», тогда перехватывают для вас!

dhclient выполнит все в каталоге /etc/dhcp/dhclient-exit-hooks.d/ после его выхода. *

Хорошая практика связать ваш скрипт с каталогом, а чем это место, но оба работают.

ln -s /path/to/your/script /etc/dhcp/dhclient-exit-hooks.d/name_of_your_script

(*) Однако dhclient не «выходит» как таковой, а скорее продолжает работать и исполняется («sources») этот каталог каждый раз делает что-то по какой-то причине.

Итак, чтобы запретить выполнение сценария много раз, я предлагаю вам обернуть его «инструкцией if» для его выполнения только если IP-адрес связан или обновлен следующим образом:

if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ]) then # your script commands here fi
2
ответ дан 17 July 2018 в 20:56

Hooks

Существует множество возможностей, как это сделать.

Если вы хотите выполнить свой скрипт «после запуска DHCP», тогда перехватывают для вас!

dhclient выполнит все в каталоге /etc/dhcp/dhclient-exit-hooks.d/ после его выхода. *

Хорошая практика связать ваш скрипт с каталогом, а чем это место, но оба работают.

ln -s /path/to/your/script /etc/dhcp/dhclient-exit-hooks.d/name_of_your_script

(*) Однако dhclient не «выходит» как таковой, а скорее продолжает работать и исполняется («sources») этот каталог каждый раз делает что-то по какой-то причине.

Итак, чтобы запретить выполнение сценария много раз, я предлагаю вам обернуть его «инструкцией if» для его выполнения только если IP-адрес связан или обновлен следующим образом:

if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ]) then # your script commands here fi
2
ответ дан 23 July 2018 в 21:36
  • 1
    Звучит неплохо, я дам ему шанс и дам вам знать, как это происходит. Спасибо. – dpoiesz 14 February 2018 в 03:51
  • 2
    Это не сработало для меня. Я добавил код сценария к моему вопросу выше. Скрипт выполняется должным образом, когда я запускаю его из командной строки, но мне пришлось удалить предлагаемый оператор if для его работы. – dpoiesz 14 February 2018 в 04:16
  • 3
    если вы добавите if-statement, он больше не будет работать из командной строки. $reason предоставляется только dhclient в выходных крюках -context! Если вы все еще хотите выполнить свой сценарий из командной строки, я предлагаю вам сделать два сценария: один в каталоге hook, который имеет if-stament, и выполняет ваш исходный скрипт (например, bash /path/to/your/script) и ваш оригинальный скрипт ( который больше не связан с каталогом hooks-directory). – Robert Riedl 14 February 2018 в 11:17
  • 4
    Я понимаю это, извините за путаный комментарий. Сценарий не выполнялся должным образом, когда я связал его с /etc/dhcp/dhclient-exit-hooks.d/. Он выполняется правильно, когда я запускаю его из командной строки (я комментирую инструкцию if). – dpoiesz 14 February 2018 в 17:27
  • 5
    используйте абсолютный путь для ~/ipAddr/ip.txt - сценарий не выполняется как ваш пользователь и не знает вашего домашнего каталога. – Robert Riedl 14 February 2018 в 17:30

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

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