Bash сценарии ввода из 3 файлов

Во-первых, попробуйте с локального сервера (, например, с помощьюwget localhost:8080)и посмотрите, что это вам даст. Если это работает, какой-то брандмауэр (либо в сети, либо на машине )не позволяет вам получить доступ; в противном случае попробуйте получить доступ к приложению менеджера на /manager, чтобы увидеть, работает ли оно.

Интересно, есть ли у пользователя tomcat доступ к вашему домашнему каталогу, потому что он должен иметь доступ к домашнему каталогу catalina. Попробуйте su - tomcatи попробуйте cdна свойCATALINA_HOME

Ваши журналы доступа могут помочь вам (и нам )диагностировать проблему.

0
24.01.2020, 09:55
4 ответа

Простой:

users = read(users.txt)
foreach user in users
  if get_consumed_quota(user) >= get_allowed_quota(user)
    print user
-1
28.01.2020, 05:06

Предполагая, что строки, говорящие Output:, на самом деле не являются частью данных,

$ paste users.txt consumed_quota.txt allowed_quota.txt | awk -F '\t' '$2 >= $3 { print $1 }'
abc@abc.com

Команда pasteсоздает набор данных с разделителями табуляцией -, где столбец 1 — это имена пользователей, столбец 2 — используемая квота, а столбец 3 — разрешенная квота.

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


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

mysql -e '
    SELECT q.username
    FROM postfix.quota2 q
    WHERE q.bytes > q.quota'
0
28.01.2020, 05:06

Для вашего запроса вам не нужно разбивать данные на 3 файла, а затем читать файлы. Вы можете напрямую читать из/tmp/all_users_query

В противном случае, @Kusalananda, ответ является вполне достаточным и полностью функциональным ответом.

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

allowed_quotausersconsumed_quota

Итак, я пришел к следующему::

#!/bin/bash

mysql -e 'select postfix.m.quota, q.* from postfix.mailbox m, postfix.quota2 q where m.username = q.username' > /tmp/all_users_query

gawk '{ if ($3 >= $1) { printf("\n%s ", $2); } }' /tmp/all_users_query

exit 0

Другое (лучшее )решение состоит в том, чтобы иметь дополнительное поле в выводе (, которое можно отбросить, если вы читаете выходной файл где-то еще ). Дополнительное поле называется overflow, и оно показывает, сколько байт переполнения израсходовано пользователем; то есть простая разница между consumed_quotaи allowed_quota.

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

#!/bin/bash

mysql -e 'select postfix.m.quota, q.* from postfix.mailbox m, postfix.quota2 q where m.username = q.username' > /tmp/all_users_query


gawk '{ allowed_amount = $1; consumed_amount = $3; if (consumed_amount >= allowed_amount) { overflow = (consumed_amount - allowed_amount); printf("\n%s\t%d", $2, overflow); } }' all_users_query | sort --key=2gr


exit 0
0
28.01.2020, 05:06

Я сам создал сценарий и получил желаемые результаты.

#!/bin/bash

rm -rf /tmp/over_quota_users

mysql -e 'select postfix.m.quota, q.* from postfix.mailbox m, postfix.quota2 q where m.username = q.username and q.bytes >= m.quota-bytes;' | cut -f2 | grep -v username > /tmp/over_quota_users

#Function to get users;

function show_users()
{
        username=`cat /tmp/over_quota_users`
        for i in $username
        do
        echo $i
        done

}


#Function to get active users;

function check_active()
{
        for i in $(show_users); do
        mysql -e 'select username, active from postfix.mailbox where username = "'$i'" and active = 1;' | grep -v username
        done
        result=`echo $?`
        echo $result


}

active_results=$(check_active $(show_users))

if [ "$active_results" == 1 ];
then

        exit 0;
else
        for j in $(show_users); do

    #changing over quota users to inactive.

        mysql -e 'update postfix.mailbox set active = '0' where username = "'$j'"';

        done

        rm -rf /tmp/oqa_ul_2_admin.txt

        echo "" > /tmp/oqa_ul_2_admin.txt
        echo "These users were over quota and active "  >> /tmp/oqa_ul_2_admin.txt
        echo "" >> /tmp/oqa_ul_2_admin.txt
        echo "---------------------------------------" >> /tmp/oqa_ul_2_admin.txt
        echo "$(show_users)" >> /tmp/oqa_ul_2_admin.txt
        echo "" >> /tmp/oqa_ul_2_admin.txt
        echo "---------------------------------------" >> /tmp/oqa_ul_2_admin.txt
        echo "" >> /tmp/oqa_ul_2_admin.txt

        /usr/bin/mail -s "Blocked Over quota and active users" emailto@me.com < /tmp/oqa_ul_2_admin.txt



fi
0
28.01.2020, 05:06

Теги

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