То, почему пост команды в/etc/network/interfaces, работало многократно при начальной загрузке?

Насколько я могу сказать, истечение учетной записи пользователя и блокировка являются функционально тем же самым; попытки входа в систему перестанут работать, попытки SSH перестанут работать и т.д. По крайней мере, в моих целях они - то же.

Так, в моем сценарии я теперь обнаруживаю, истекает ли пользователь, и если так, заблокируйте пользователя и установите истечение на 'никогда'.

Это выглядит примерно так:

# Takes 1 parameter, the username to check
# Returns 0 if the user is expired, or 1 if it is not expired.
function userExpired()
{
    # These day values are just numbers, the number of days since the epoch.
    local expireDay=`grep $1 /etc/shadow | cut -d: -f8`

    # If diag has no expiration date, it will be empty.
    if [[ "$expireDay" -eq "" ]] ; then
        return 1
    fi

    local today=`perl -e 'print int(time/(60*60*24))'`
    local daysUntilExpire=`echo $expireDay - $today | bc`

    [[ $daysUntilExpire -lt 0 ]]
}

# Check if the diag user is expired and if so, lock and unexpire it.
userExpired diag && {
    usermod --lock --expiredate -1 diag
}

Я записал функцию userExpired из кода, найденного в этом сообщении форума (измененный для установки моему стилю кода и лучшему именованию переменной).

10
24.04.2016, 17:41
4 ответа

Files в ] /etc/network/if-up.d уже запускается автоматически всякий раз, когда появляется интерфейс (любой интерфейс). Когда вы указываете тот же сценарий для повторного запуска в явной команде post-up , вы только заставляете сценарий запускаться снова. Итак, я предполагаю, что должно произойти следующее:

  • Он запускается один раз, когда появляется lo (с переменной среды IFACE = lo ) из-за того, что он находится в / и т. Д. /network/if-up.d .
  • Он запускается один раз, когда появляется eth0 (с переменной среды IFACE = eth0 ) по той же причине.
  • Он запускается снова, когда появляется eth0 (с неустановленной переменной среды IFACE ), потому что вы запросили это в директиве post-up .

Я не знаю, откуда взялся четвертый раз, но в любом случае это уже три.

Вам нужно либо найти сценарий в другом месте и запустить его один раз с помощью директивы post-up , либо оставить его там, где он есть, но не упоминать его в post-up и проверьте значение $ IFACE , чтобы он ничего не делал, если не появился желаемый интерфейс ( eth0 ).

13
27.01.2020, 20:00

Спасибо Омни. Даже следующим образом, я могу достичь этого. Конечно, Урс - это просто. Спасибо большое

       grep -H "exit 0" /opt/ctmagent/ctm/sysout_archives/141027/d_dms_btch_alrt_ifm_scp_ksh* | awk -F":" '{system("ls -latr "$1"")}'
-121--133827-

Из ваших других вопросов я понимаю, что вы используете OS X. Файловая система HFS + по умолчанию в OS X не учитывает регистр: вы не можете иметь два файла с именами «abc» и «ABC» в одном каталоге, и при попытке доступа к любому имени вы получите одно и то же имя То же самое может произойти при Cygwin или с файловыми системами без учета регистра (например, FAT32 или ciopfs ) в любом месте.

Поскольку grep является реальным исполняемым файлом, он находится в файловой системе (в каталогах PATH ). При поиске в оболочке /usr/bin для grep или GREP будет найден исполняемый файл grep .

Сборки оболочки не просматриваются в файловой системе: поскольку они встроены, доступ к ним осуществляется посредством (с учетом регистра) строковых сравнений внутри самой оболочки.

То, с чем вы сталкиваетесь - интересный случай. В то время как cd является builtin, доступ к нему осуществляется с учетом регистра, CD находится в виде исполняемого файла /usr/bin/cd . Исполняемый файл cd довольно бесполезен: поскольку cd влияет на текущую среду выполнения оболочки, он всегда предоставляется как обычная встроенная оболочка , но существует cd исполняемая для POSIX sake , которая в любом случае изменяет каталог для себя, а затем немедленно прекращает работу, оставляя окружающую оболочку там, где она начиналась.

Вы можете попробовать их с помощью type builtin :

$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD

type указывает, что будет делать оболочка при выполнении этой команды. При запуске cd вы получаете доступ к builtin, но CD находит исполняемый файл. Для других построений builtin и исполняемый файл будут разумно совместимы (попробуйте echo ), но для cd это невозможно.

-121--13497-

Удалить пустую строку перед выкладкой -командой. Команда post-up должна быть связана только с eth0 . Дополнительно переместите сценарий из папки if-up.d . Сценарии в этой папке выполняются автоматически, независимо от того, определены ли они как post-up . В вашем случае он будет выполняться дополнительно к вашей команде post-up .

1
27.01.2020, 20:00

Как указано Селадой, / etc / network / if -up.d скрипты запускаются для каждого интерфейса. Чтобы избежать дублирования правил, просто добавьте:

[ "$IFACE" = "eth0" ] || exit 0

вверху вашего скрипта. Это приведет к немедленному завершению работы сценария, если интерфейс не является желаемым.

3
27.01.2020, 20:00

Сценарии в /etc/network/if-*.dвыполняются для каждого интерфейса, но также для каждого семейства адресов(IPv4 и IPv6 ).

Вы можете проверить переменную $ADDRFAM, если вы не хотите или не хотите, чтобы сценарий выполнялся как для семейств IPv4, так и для семейств IPv6.

Например, если вам нужно, чтобы ваш скрипт работал только для определенного интерфейса и только для его IPv4-адреса, вы можете начать с чего-то вроде этого:

[ "$IFACE"   = "eth0" ] || exit 0  # we only want interface "eth0"
[ "$ADDRFAM" = "inet" ] || exit 0  # we only want IPv4 (not "inet6" for IPv6)
0
24.04.2021, 15:33

Теги

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