Можно симулировать быть клиентом, читая соответствующий RFC (особенно вокруг раздела 4) и симулируя быть почтовым клиентом. Выключите все конфигурации SSL/TLS сначала, чтобы видеть, можете ли Вы отправить почту правильно. Затем включите их и использование telnet-ssl
или openssl client
соединяться с портами SSL вместо этого.
Кроме того, необходимо быть ясными на том, существуют ли проблемы с локальной или внешней доставкой почты. Если это - локальная доставка, необходимо проверить, как это сделано postfix
. Распространенный способ состоял бы в том, чтобы передать доставку местной почты по каналу к procmail
но также возможно передать его по каналу к dovecot
и необходимо удостовериться, что передача по каналу работает правильно. Проверьте журналы.
Если существует под управлением Firefox, вызов к firefox
просто контакты это, сразу передает запрос печати и выходы. Запрос печати выполняется асинхронно в рабочем экземпляре. Я не знаю, существует ли способ получить уведомление, когда печать закончена.
(Непротестированное) обходное решение должно было бы создать новый профиль в Вашем сценарии (распакуйте подготовленную zip под случайным именем). Можно выполнить несколько экземпляров Firefox, пока они используют различные профили. Сотрите временный профиль, после того как Firefox выходит. Это предполагает, что расширение печати не оставляет выполнение экземпляра Firefox; если это делает, Вы могли бы взломать его для выхода из Firefox, после того как это закончено.
Я не ужасно знаком с использованием FireFox, чтобы распечатать, но играть Вас вокруг с ударом wait
команда? Можно подать его определенный PID для ожидания. Таким образом следующей из Ваших команд печати Firefox, Вы могли просто сделать wait $!
. Или, если Вы не указываете никого и просто используете wait
, это будет просто ожидать всех дочерних процессов для окончания.
Я не могу гарантировать, что FireFox будет играть приятно с этим. Но это стоит того, чтобы попытаться.
В конце Вашего firefoxprint () стандартная программа добавьте:
while [ ! -s $outputFile ]; do
sleep 1
done
который должен получить Вас по крайней мере некоторая задержка - она ожидает, пока нет non-zero-length выходной файл перед продолжением. Надо надеяться, это замедлит его вниз достаточно, что последующие вызовы будут использовать существующий Firefox и не думать, что должны породить свое собственное.
Когда Вы звоните firefox
не указывая полный каталог, это запустит скрипт обертки, который делает exec
из фактического исполняемого файла. Это может вызывать Вашу проблему, или исполняемый файл может делать двойное ветвление, которое заставляет это работать в фоновом режиме без использования &
. Я не знаю, как можно предотвратить это.
Существует, только один ожидает для создания его.
a) Создайте специализированный профиль в Firefox для печати:
Firefox - неудаленный-ProfileManager
b) Запустите Firefox Firefox - неудаленный-P
c) действительно ожидать
Хорошо, наконец решенный. Спасибо за всю Вашу справку.
Была другая проблема: крон запускает Firefox без огибающих переменных, таким образом, я должен был определить дисплей, где работать.
Вот заключительный код.
#!/bin/bash
#autor : Joan Marc Riera Duocastella.
#license : BSD i guess. I just don't care. :)
# firefox -print option depends on http://sites.google.com/site/torisugari/commandlineprint2
# it's kind of possible that a file inside de .xpi extension must be edited to get bigger pdf . Depends on the html you would like to print. Good html code does not need it.
####variables
## Date, to be used as reference on tmp files
DATE=`date +%Y%m%d`
## File where all webs to report are listed
WEBSFILE="/home/marc.riera/Desktop/reports/websfile.txt" # urls to print. lines starting with # will be ignored.
## Where to store all the files.
WORKDIR="/home/marc.riera/Desktop/reports"
MAILTO="marc.riera@barcelonamedia.org" # other mails can be added just with a single space between
MAILTEXTFILE=$WEBSFILE
FFPROFILE="cnm-profile" #FIREFOX PROFILE - create it with firefox -ProfileManager while no other firefox instances running
##################do not edit under this line
#echo "$DATE - $0"
logger $0
TMPDIR=$WORKDIR/$DATE
test -d $TMPDIR && rm -f $TMPDIR/*.pdf|| mkdir -p $TMPDIR && echo "Create folder $TMPDIR for temporal usage"
REPORT=$WORKDIR/Report_$DATE.pdf
##firefox -print "http://fbmsgga01/ganglia/?m=cpu_report&r=month&s=descending&c=CPU+cluster&h=&sh=1&hc=4&z=small" -printmode pdf -printdelay 5 -printfile ~/Desktop/reports/test.pdf
firefoxprint (){
web2Print=$1
outputFile=$2
#echo "printing $1 on $2"
env DISPLAY=:0.0 firefox -P $FFPROFILE -no-remote -print "$web2Print" -printmode pdf -printdelay 15 -printfile $outputFile &
while [ ! -s $outputFile ]; do
sleep 1
done
}
##gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=dospdf.pdf -dBATCH ganglia.pdf test.pdf
pdfjoin (){
outputFile=$1
tempdir=$2
cd $tempdir
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=$outputFile -dBATCH `ls -tr $tmpdir`
wait
}
sendmail (){
#echo "Sending mail"
mutt -s "Report del dia $DATE" -a $REPORT -- $MAILTO < $MAILTEXTFILE
wait
}
###################################### MAIN
#######################################
COUNTER=0
for web in `cat $WEBSFILE|grep -v '^#'|grep -v '^$'`
do
firefoxprint $web $TMPDIR/$COUNTER.pdf
let COUNTER+=1
done
pdfjoin $REPORT $TMPDIR
sendmail
exit 0
Я все еще для улучшений, но к настоящему времени это делает то, в чем я нуждаюсь.