Bash последовательные команды. Вызывание функций, не запуская новые потоки

Можно симулировать быть клиентом, читая соответствующий RFC (особенно вокруг раздела 4) и симулируя быть почтовым клиентом. Выключите все конфигурации SSL/TLS сначала, чтобы видеть, можете ли Вы отправить почту правильно. Затем включите их и использование telnet-ssl или openssl client соединяться с портами SSL вместо этого.

Кроме того, необходимо быть ясными на том, существуют ли проблемы с локальной или внешней доставкой почты. Если это - локальная доставка, необходимо проверить, как это сделано postfix. Распространенный способ состоял бы в том, чтобы передать доставку местной почты по каналу к procmail но также возможно передать его по каналу к dovecot и необходимо удостовериться, что передача по каналу работает правильно. Проверьте журналы.

1
задан 2 September 2010 в 19:31
6 ответов

Если существует под управлением Firefox, вызов к firefox просто контакты это, сразу передает запрос печати и выходы. Запрос печати выполняется асинхронно в рабочем экземпляре. Я не знаю, существует ли способ получить уведомление, когда печать закончена.

(Непротестированное) обходное решение должно было бы создать новый профиль в Вашем сценарии (распакуйте подготовленную zip под случайным именем). Можно выполнить несколько экземпляров Firefox, пока они используют различные профили. Сотрите временный профиль, после того как Firefox выходит. Это предполагает, что расширение печати не оставляет выполнение экземпляра Firefox; если это делает, Вы могли бы взломать его для выхода из Firefox, после того как это закончено.

1
ответ дан 3 December 2019 в 19:34

Я не ужасно знаком с использованием FireFox, чтобы распечатать, но играть Вас вокруг с ударом wait команда? Можно подать его определенный PID для ожидания. Таким образом следующей из Ваших команд печати Firefox, Вы могли просто сделать wait $!. Или, если Вы не указываете никого и просто используете wait, это будет просто ожидать всех дочерних процессов для окончания.

Я не могу гарантировать, что FireFox будет играть приятно с этим. Но это стоит того, чтобы попытаться.

1
ответ дан 3 December 2019 в 19:34
  • 1
    Хорошая попытка, но все еще открывает столько же Firefox сколько строки в файле. И не ожидайте команды печати для окончания. Я предполагаю, что Firefox не играет по правилам с этим. –  Marc Riera 2 September 2010 в 20:01

В конце Вашего firefoxprint () стандартная программа добавьте:

  while [ ! -s $outputFile ]; do
    sleep 1
  done

который должен получить Вас по крайней мере некоторая задержка - она ожидает, пока нет non-zero-length выходной файл перед продолжением. Надо надеяться, это замедлит его вниз достаточно, что последующие вызовы будут использовать существующий Firefox и не думать, что должны породить свое собственное.

1
ответ дан 3 December 2019 в 19:34

Когда Вы звоните firefox не указывая полный каталог, это запустит скрипт обертки, который делает exec из фактического исполняемого файла. Это может вызывать Вашу проблему, или исполняемый файл может делать двойное ветвление, которое заставляет это работать в фоновом режиме без использования &. Я не знаю, как можно предотвратить это.

0
ответ дан 3 December 2019 в 19:34

Существует, только один ожидает для создания его.

a) Создайте специализированный профиль в Firefox для печати:

Firefox - неудаленный-ProfileManager

b) Запустите Firefox Firefox - неудаленный-P

c) действительно ожидать

0
ответ дан 3 December 2019 в 19:34

Хорошо, наконец решенный. Спасибо за всю Вашу справку.

Была другая проблема: крон запускает 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

Я все еще для улучшений, но к настоящему времени это делает то, в чем я нуждаюсь.

0
ответ дан 3 December 2019 в 19:34

Теги

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