The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Как притормозить init 0?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на рабочей станции (Разное / Linux)
Изначальное сообщение [ Отслеживать ]

"Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 02-Авг-16, 07:44 
Добрый день, коллеги.
Сделал скрипт, который при старте и остановке системы посылает письмо мне.
Поместил его в init.d, сделал симлинки по науке для 3 и 5 уровня: S50message, K01message (при запуске последним, при остановке - первым).
Но вот незадача! Остановка происходит, видимо, очень быстро и параллельно, что сообщение-то он отправляет, но MTA его отправляет только в следующий раз после включения.
Как бы так сделать, чтобы MTA (postfix) не завершался, пока мой скрипт не отработает?
Даже в зависимостях я там поставил postfix (Required-Stop: postfix) - не помогает.
Если из консоли (ssh) делать init 0 - тогда отправляется правильно.
Но если из иксов делать завершение - нет.
Что я сделал не так?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как притормозить init 0?"  +/
Сообщение от XAnder (ok) on 02-Авг-16, 08:27 
> Как бы так сделать, чтобы MTA (postfix) не завершался, пока мой скрипт
> не отработает?

Правильный вопрос будет такой: «Как бы так сделать, чтобы MTA (postfix) не завершался, пока не отправит моё письмо?»

Скрипт должен убедиться, что письмо действительно отправлено, прежде чем завершиться. Иначе никто не гарантирует, что Постфикс успеет его оправить в этой жизни.

Самое простое, что приходит в голову, — последить за очередью на отправку или логами Постфикса.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 02-Авг-16, 09:09 
В скрипте у меня даже пауза есть, секунды 2-3. Это не меняет дела.
Как скрипт может влиять на init?? Фиолетово - убедился скрипт в отправке или нет, постфикс выключен и рабочая станция пошла в halt.
Тут надо как-то сказать init чтобы не завершал postfix (и всё, что для него требуется) до того, как выйдет скрипт.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Как притормозить init 0?"  +/
Сообщение от ыы on 02-Авг-16, 09:21 
> В скрипте у меня даже пауза есть, секунды 2-3. Это не меняет
> дела.
> Как скрипт может влиять на init?? Фиолетово - убедился скрипт в отправке
> или нет, постфикс выключен и рабочая станция пошла в halt.
> Тут надо как-то сказать init чтобы не завершал postfix (и всё, что
> для него требуется) до того, как выйдет скрипт.

Зачем вам вообще в этой ситуации постфикс? Отправляйте прямо из тела скрипта.
К тому же, если вы станете ждать пока постфикс не отправит письмо, а письмо попадет в отложенную очередь (сразу не отправится), ребут может так никогда и не закончиться.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 02-Авг-16, 11:11 
> Зачем вам вообще в этой ситуации постфикс? Отправляйте прямо из тела скрипта.

Полагаю, вы хотите предложить отправлять на сторонний смтп-релей?
Я думал про это. Но оно неудобно по ряду причин.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Как притормозить init 0?"  +/
Сообщение от ыы on 02-Авг-16, 11:51 
>> Зачем вам вообще в этой ситуации постфикс? Отправляйте прямо из тела скрипта.
> Полагаю, вы хотите предложить отправлять на сторонний смтп-релей?
> Я думал про это. Но оно неудобно по ряду причин.

Гхм... зачем вам  смтп-релей чтобы отправить письмо? Это элементарно делается прямо из скрипта. Либо прогой из шелл либо перл-скриптом.

https://www.yandex.ru/yandsearch?clid=9582&text=отправка%20письма%20из%20bash&l10n=ru&lr=20728&redircnt=1470127601.1

https://www.yandex.ru/search/?clid=9582&text=sendEmail%...

https://www.yandex.ru/search/?text=отправка%20письма%20perl&lr=20728&clid=9582

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 02-Авг-16, 12:23 
>>> Зачем вам вообще в этой ситуации постфикс? Отправляйте прямо из тела скрипта.
>> Полагаю, вы хотите предложить отправлять на сторонний смтп-релей?
>> Я думал про это. Но оно неудобно по ряду причин.
> Гхм... зачем вам  смтп-релей чтобы отправить письмо? Это элементарно делается прямо
> из скрипта. Либо прогой из шелл либо перл-скриптом.
> https://www.yandex.ru/yandsearch?clid=9582&text=отправка%20письма%20из%20bash&l10n=ru&lr=20728&redircnt=1470127601.1
> https://www.yandex.ru/search/?clid=9582&text=sendEmail%...
> https://www.yandex.ru/search/?text=отправка%20письма%20perl&lr=20728&clid=9582

То что вы предлагаете - не что иное, как "отправка письма по смтп, как любой смтп клиент".
1. Зареги адрес в мэйлру или гмыле.
2. Включи там возможность отправить через смтп.
3. Узнай адрес смтп, порт, открой порты, установи емейл-клиента (как вы предлагаете sendEmail), OpenSSL и пр.
4. Еще потом трахайся с авторизацией полдня, следи, почему не отправляется и тп.

В таком случае лучше поднять во вне свой релей и прописать там нужные ИП, обратные зоные и тп.
Но и этим я не хочу заниматься, т.к. все равно "есть зависимость от стороннего сервиса".
"Прямо из скрипта", как вы говорите, я и отправляю:
echo "Some message@|/bin/mail -s subject some@address.com
Можно команде mail сказать, чтоб отправляла на тот самый релей. Но мне это неудобно.
Надо чтобы отправлялось сразу на сервер получателя по MX, однако mail этого делать не умеет.
Задача-то простая. Всего навсего притормозить секунды на 3 останов постфикса и сети.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "Как притормозить init 0?"  +/
Сообщение от ыы on 02-Авг-16, 12:53 
>[оверквотинг удален]
>> Гхм... зачем вам  смтп-релей чтобы отправить письмо? Это элементарно делается прямо
>> из скрипта. Либо прогой из шелл либо перл-скриптом.
>> https://www.yandex.ru/yandsearch?clid=9582&text=отправка%20письма%20из%20bash&l10n=ru&lr=20728&redircnt=1470127601.1
>> https://www.yandex.ru/search/?clid=9582&text=sendEmail%...
>> https://www.yandex.ru/search/?text=отправка%20письма%20perl&lr=20728&clid=9582
>То что вы предлагаете - не что иное, как "отправка письма по смтп, как любой смтп клиент".
>1. Зареги адрес в мэйлру или гмыле.
>2. Включи там возможность отправить через смтп.
>3. Узнай адрес смтп, порт, открой порты, установи емейл-клиента (как вы предлагаете sendEmail), OpenSSL и пр.
>4. Еще потом трахайся с авторизацией полдня, следи, почему не отправляется и тп.

Зачем вы все это делаете? Ссылки которые я вам дал- как раз отправляют письмо сразу на почтовый сервер получателя.

> Надо чтобы отправлялось сразу на сервер получателя по MX, однако mail этого
> делать не умеет.

У меня перловый скрипт, отправляет "сразу на сервер получателя по MX". 10 строк кода. Ссылки я вам дал.

>Задача-то простая. Всего навсего притормозить секунды на 3 останов постфикса и сети.

https://www.yandex.ru/search/?text=service%20linux%20зависимость%20сервисов&lr=20728&clid=9582

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 03-Авг-16, 09:08 
> Зачем вы все это делаете? Ссылки которые я вам дал- как раз
> отправляют письмо сразу на почтовый сервер получателя.

1. Допустим, я напишу в скрипте отправку по смтп с помощью телнета напрямую по MX (в общем то же самое, что "ваш перловый скрипт"). Но init0-то идет, и его никто не останавливал!! причем одновременно и параллельно!! Вы это понимаете? Это значит, что в этот момент параллельно идет завершение не только постфикса, но и сети и прочих вещей, которые нужны для отработки такого скрипта.

2. Зависимость сервисов прописана. См. первый пост. Это не помогает.


Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

13. "Как притормозить init 0?"  +/
Сообщение от ыы on 03-Авг-16, 09:46 
>> Зачем вы все это делаете? Ссылки которые я вам дал- как раз
>> отправляют письмо сразу на почтовый сервер получателя.
> 1. Допустим, я напишу в скрипте отправку по смтп с помощью телнета
> напрямую по MX (в общем то же самое, что "ваш перловый
> скрипт"). Но init0-то идет, и его никто не останавливал!! причем одновременно
> и параллельно!! Вы это понимаете? Это значит, что в этот момент
> параллельно идет завершение не только постфикса, но и сети и прочих
> вещей, которые нужны для отработки такого скрипта.

Вот про сеть это правильная мысль. а про постфикс-нет. ведь он же не участвует в этом процессе.

> 2. Зависимость сервисов прописана. См. первый пост. Это не помогает.
>Даже в зависимостях я там поставил postfix (Required-Stop: postfix)

То есть  message должен подождать пока postfix не завершится? Наверное он так и делает.
Ждет пока постфикс не завершится, потом начинает отправлять через постфикс письмо...


Нужно в скриптах сеть, постфикс - поставить зависимость от message наверное...
и в скрипте сеть - поставить зависимость от постфикс...

Но постфикс завершается вне зависимости от того есть у него письма на оправку или нет.
И и тут мы возвращаемся к отправке письма без постфикса, а скриптом  напрямую из message.
В этом случае нужно проконтролировать только сеть -> "в скрипте сеть - поставить зависимость от message"

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Как притормозить init 0?"  +/
Сообщение от ыы on 03-Авг-16, 09:58 
>[оверквотинг удален]
> так и делает.
> Ждет пока постфикс не завершится, потом начинает отправлять через постфикс письмо...
> Нужно в скриптах сеть, постфикс - поставить зависимость от message наверное...
> и в скрипте сеть - поставить зависимость от постфикс...
> Но постфикс завершается вне зависимости от того есть у него письма на
> оправку или нет.
> И и тут мы возвращаемся к отправке письма без постфикса, а скриптом
>  напрямую из message.
> В этом случае нужно проконтролировать только сеть -> "в скрипте сеть -
> поставить зависимость от message"

Хотя конечно, можно в скрипт message, в конце, поставить sleep 60 или sleep 600 и надеяться, что постфиксу хватит этого времени чтоб отправить почту.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 03-Авг-16, 10:13 
> Хотя конечно, можно в скрипт message, в конце, поставить sleep 60 или
> sleep 600 и надеяться, что постфиксу хватит этого времени чтоб отправить
> почту.

Да не помогает sleep. У меня есть он в конце скрипта (sleep 5).
Пока этот скрипт работает (в фоне), в это время и постфикс и сеть уже завершаются, никого не спрашивая.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Как притормозить init 0?"  +/
Сообщение от ыы on 03-Авг-16, 10:29 
>> Хотя конечно, можно в скрипт message, в конце, поставить sleep 60 или
>> sleep 600 и надеяться, что постфиксу хватит этого времени чтоб отправить
>> почту.
> Да не помогает sleep. У меня есть он в конце скрипта (sleep
> 5).
> Пока этот скрипт работает (в фоне), в это время и постфикс и
> сеть уже завершаются, никого не спрашивая.

Это имеет смысл делать после того как настроена зависимость сервисов.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 04-Авг-16, 05:55 
Написал телнет-сессию напрямую на MX из баш-скрипта.
Вообще теперь не отправляет (в течение init 0), т.к. сессия смтп длится намного дольше (пауза при helo, пауза при data, rcpt to, итп).
Если скрипт запустить руками - конечно всё отправляется красиво.

В общем вопрос остается открытым.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

18. "Как притормозить init 0?"  +/
Сообщение от Square1 on 04-Авг-16, 09:05 
> Написал телнет-сессию напрямую на MX из баш-скрипта.
> Вообще теперь не отправляет (в течение init 0), т.к. сессия смтп длится
> намного дольше (пауза при helo, пауза при data, rcpt to, итп).
> Если скрипт запустить руками - конечно всё отправляется красиво.
> В общем вопрос остается открытым.

http://www.opennet.dev/openforum/vsluhforumID15/4323.html#13

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

6. "Как притормозить init 0?"  +/
Сообщение от XAnder (ok) on 02-Авг-16, 12:20 
> Сделал скрипт, который при старте и остановке системы посылает письмо мне.
> Поместил его в init.d, сделал симлинки по науке для 3 и 5
> уровня: S50message, K01message (при запуске последним, при остановке - первым).

А для уровней 0 и 6 сделали? Какая у вас вообще система инициализации используется? Да и дистрибутив неплохо бы знать…

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Как притормозить init 0?"  +/
Сообщение от antoshkin (ok) on 02-Авг-16, 12:24 
>> Сделал скрипт, который при старте и остановке системы посылает письмо мне.
>> Поместил его в init.d, сделал симлинки по науке для 3 и 5
>> уровня: S50message, K01message (при запуске последним, при остановке - первым).
> А для уровней 0 и 6 сделали? Какая у вас вообще система
> инициализации используется? Да и дистрибутив неплохо бы знать…

Для уровня 6 не нужно, а для 0 - там тоже криво: скрипт вызывается с параметром start.
И так же не срабатывает.

Дистрибутив - OpenSuse 11.04
Система sysV.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

9. "Как притормозить init 0?"  +/
Сообщение от XAnder (ok) on 02-Авг-16, 12:48 
> Для уровня 6 не нужно, а для 0 - там тоже криво:
> скрипт вызывается с параметром start.
> И так же не срабатывает.
> Дистрибутив - OpenSuse 11.04
> Система sysV.

Интересно. Я, конечно, дебианщик, с openSUSE дел не имел. Правильно ли я понял, что у вас есть ссылка /etc/rc0.d/K01message, и при выключении (т. е. переходе на уровень 0) системы скрипт по этой ссылке почему-то запускается с аргументом start?

И почему для уровня 6 не нужно? У вас никогда не бывает перезагрузки?

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Как притормозить init 0?"  +/
Сообщение от XAnder (ok) on 02-Авг-16, 13:28 
>[оверквотинг удален]
>> скрипт вызывается с параметром start.
>> И так же не срабатывает.
>> Дистрибутив - OpenSuse 11.04
>> Система sysV.
> Интересно. Я, конечно, дебианщик, с openSUSE дел не имел. Правильно ли я
> понял, что у вас есть ссылка /etc/rc0.d/K01message, и при выключении (т.
> е. переходе на уровень 0) системы скрипт по этой ссылке почему-то
> запускается с аргументом start?
> И почему для уровня 6 не нужно? У вас никогда не бывает
> перезагрузки?

Ага, понял, в Сусе сделано не так, как в Дебиане. rc0.d и rc6.d здесь, похоже, не нужны.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

19. "Как притормозить init 0?"  –1 +/
Сообщение от antoshkin (ok) on 05-Авг-16, 06:47 
Еще нюанс.
Компьютер берет сеть по вайфай посредством NetworkManager в иксах.
В итоге, когда комп выключается, (я притормозил постфикс в его init скрипте), видимо сеть отключается быстрее всего, и постфикс ругается на то, что не может найти домен получателя.
Досылает письмо при следующем включении компа.
В общем кривовато.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

20. "Как притормозить init 0?"  +/
Сообщение от Ingoa on 08-Авг-16, 18:54 
> Еще нюанс.
> Компьютер берет сеть по вайфай посредством NetworkManager в иксах.
> В итоге, когда комп выключается, (я притормозил постфикс в его init скрипте),
> видимо сеть отключается быстрее всего, и постфикс ругается на то, что
> не может найти домен получателя.
> Досылает письмо при следующем включении компа.
> В общем кривовато.

Может проще будет просто мониторить каким-нить nagios какой-нить сервис вашего компа? А там по событиям писать письма, смс-сить, кормить кота?

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "Как притормозить init 0?"  +/
Сообщение от Пр0х0жий (ok) on 15-Ноя-16, 17:29 
> Поместил его в init.d, сделал симлинки по науке для 3 и 5
> уровня: S50message, K01message (при запуске последним, при остановке - первым).
> ...
> он отправляет, но MTA его отправляет только в следующий раз после
> включения.

sysvinit:
Если lock-файл в /var/lock/subsys не существует, разрешён старт сервиса.
Если lock-файл в /var/lock/subsys существует, разрешён стоп сервиса.
lock-файл: пустой файл с именем сервиса.

Можно также заглянуть в /etc/init.d/functions

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру