Как автоматически запускать один и тот же скрипт для сотен пользователей?

Попробуйте что-нибудь из этого:

$ cat tst.sh
#!/bin/env bash

assPath='/foo:/bar/whatever:/somewhere/else'

assFind() {
    local tgt="$1" dir assArr
    IFS=':' read -r -a assArr <<< "$assPath"
    for dir in "${assArr[@]}"; do
        printf 'Searching "%s"\n' "$dir" >&2
        if [[ -e "${dir}/${tgt}" ]]; then
            printf '%s/%s\n' "$dir" "$tgt"
            return 0
        fi
    done
    return 1
}

assFind 'ding.ogg'

$./tst.sh
Searching "/foo"
Searching "/bar/whatever"
Searching "/somewhere/else"

Очевидно, что в моей системе нет ни этих каталогов, ни этого файла, поэтому при запуске не было стандартного вывода.

1
14.10.2021, 10:53
2 ответа

Размещение скрипта в домашних каталогах пользователей не помогает, вам все равно нужно каким-то образом его запустить.

Поместите сценарий (или ссылку на него )в какой-нибудь подходящий каталог, а затем запустите инструмент в одном из глобальных файлов запуска оболочки, если пользователь входит в данную группу. Для запуска при входе в систему вы можете использовать /etc/profileили файл в /etc/profile.d/на большинстве систем. Затем вы можете проверить членство в группе примерно так:

if id | grep -qwF specialgroup; then
    /path/to/specialtool
fi

idв Linux выводит что-то вроде ...groups=1000(blah),4(adm),20(dialout),24(cdrom),25(floppy)..., а grep -wищет полные совпадения -слов. Это должно работать до тех пор, пока имена ваших групп содержат только «словесные символы» в смысле языка программирования, то есть a-zA-Z0-9_. Если они этого не сделают, что ж, вам придется сделать что-то другое.

Вместо idвы можете использовать groupsили что-то другое, что есть в вашей системе, если это не система GNU/Linux.

(Конечно, вы также можете поместить скрипт куда-нибудь в PATH, чтобы вам не нужно было включать полный путь в скрипт входа в систему.)

1
14.10.2021, 11:41

(не могу комментировать, недостаточно реп...)

Из обмена комментариями я бы сказал, что вам нужно установить свой скрипт как принадлежащий этой группе пользователей (и соответствующим образом обновить разрешения ugo ), а затем добавить строку в их.bashrc (или любой эквивалентный файл на основе ОС )для запуска указанного скрипта.

Кстати, это отличный инструмент.

0
14.10.2021, 11:23

Теги

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