Я пытаюсь получить изменения, зарегистрированные нашей установкой RANCID, чтобы они были зарегистрированы и отправлены во внутреннюю систему вещания, которая у нас есть. Я могу поговорить с этим напрямую через netcat, например, это будет работать:
echo "Hello world" | netcat localhost 12345
RANCID отправляет изменения по электронной почте, поэтому я пытаюсь использовать procmail, чтобы перехватить эти электронные письма и отправить их на наш локальный pastebin, а затем передать ответ (который содержит URL-адрес) в netcat.
Я могу воспроизвести весь этот поток в командной строке следующим образом:
testmail=$(cat testmail.txt)
URL=$(curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345
Вот мой .procmailrc на данный момент:
## store the body in MESSAGE
:0 b
MESSAGE=|
##Send that message to Wirehive pastebin
:0
| URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345
Проверяю журнал почты, маршрутизация почты работает нормально. Когда файл закомментирован и проверяется почтовый ящик принимающих пользователей в Mutt, я вижу, что пришло сообщение. Если файл не закомментирован, сообщение не появляется в почтовом ящике, поэтому .procmailrc обрабатывается, и сообщение передается ему.
Вероятно, стоит отметить, что это на Ubuntu 12.04.
В MESSAGE
задание не работает так, как вы его написали. Попробуй это:
:0b
MESSAGE=| cat
Кроме того, URL=...
присвоение не является допустимой командой; вам нужно реорганизовать присвоение переменной, чтобы оно не входило в рецепт:
URL=`curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create`
:0
| echo "RANCID logged some changes: $URL" | netcat localhost 12345
... или, возможно, вы могли бы заставить его работать, заставив его вызывать оболочку, обычно добавляя один из SHELLMETAS
:
:0 # notice semicolon at end
| URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) \
&& echo "RANCID logged some changes: $URL" | netcat localhost 12345 ;
... но мне действительно нравится первая, более читаемая альтернатива.
Если можно как-то реорганизовать curl
командную строку для чтения стандартного ввода и записи в стандартный вывод, это можно было бы сделать более элегантным, по крайней мере, чтобы избежать отдельного MESSAGE
переменная и, возможно, даже будет преобразована в однострочную форму.