Во-первых, попробуйте с локального сервера (, например, с помощьюwget localhost:8080
)и посмотрите, что это вам даст. Если это работает, какой-то брандмауэр (либо в сети, либо на машине )не позволяет вам получить доступ; в противном случае попробуйте получить доступ к приложению менеджера на /manager
, чтобы увидеть, работает ли оно.
Интересно, есть ли у пользователя tomcat доступ к вашему домашнему каталогу, потому что он должен иметь доступ к домашнему каталогу catalina. Попробуйте su - tomcat
и попробуйте cd
на свойCATALINA_HOME
Ваши журналы доступа могут помочь вам (и нам )диагностировать проблему.
Простой:
users = read(users.txt)
foreach user in users
if get_consumed_quota(user) >= get_allowed_quota(user)
print user
Предполагая, что строки, говорящие 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'
Для вашего запроса вам не нужно разбивать данные на 3 файла, а затем читать файлы. Вы можете напрямую читать из/tmp/all_users_query
В противном случае, @Kusalananda, ответ является вполне достаточным и полностью функциональным ответом.
Я проверил файлы, которые вы описали, и определил, что они возникли из запроса (довольно очевидного )в следующем порядке::
allowed_quota
users
consumed_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
Я сам создал сценарий и получил желаемые результаты.
#!/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