Postfixadmin и fethmail

Клиенты и серверы

Модератор: /dev/random

Ответить
Ale][R
Сообщения: 60
ОС: CentOS

Postfixadmin и fethmail

Сообщение Ale][R »

Подскажите с таким вопросом.
Поставил Postfixadmin + Dovecot + fethmail + Roundcube Список юзеров в MySQL
Все работает кроме fethmail, а точнее того скрипта для него который идет с Postfixadmin
А именно вот сам fetchmail.pl

Код: Выделить всё

# cat /usr/share/postfixadmin/ADDITIONS/fetchmail.pl
#!/usr/bin/perl

use DBI;
use MIME::Base64;
# use Data::Dumper;
use File::Temp qw/ mkstemp /;
use Sys::Syslog;
# require liblockfile-simple-perl
use LockFile::Simple qw(lock trylock unlock);

######################################################################
########## Change the following variables to fit your needs ##########
my $db_type = 'mysql';
our $db_host="mysql.domain.local";
our $db_name="DB_mail";
our $db_username="user_mail";
our $db_password="pwd_mail";
if (-f "/etc/mail/postfixadmin/fetchmail.conf") {
        require "/etc/mail/postfixadmin/fetchmail.conf";
}
#################### Don't change anything below! ####################
######################################################################
openlog("fetchmail-all", "pid", "mail");
sub log_and_die {
        my($message) = @_;
  syslog("err", $message);
  die $message;
}
$configfile = "/etc/fetchmail-all/config";
@ARGS1 = @ARGV;
while ($_ = shift @ARGS1) {
    if (/^-/) {
        if (/^--config$/) {
            $configfile = shift @ARGS1
        }
    }
}
$run_dir="/var/spool/fetchmail";
if (-e $configfile) {
    do $configfile;
}

if($db_type eq "Pg" || $db_type eq "mysql") {
        $dsn = "DBI:$db_type:database=$db_name;host=$db_host";
} else {
        log_and_die "unsupported db_type $db_type";
}

$lock_file=$run_dir . "/fetchmail-all.lock";

$lockmgr = LockFile::Simple->make(-autoclean => 1, -max => 1);
$lockmgr->lock($lock_file) || log_and_die "can't lock ${lock_file}";

$dbh = DBI->connect($dsn, $db_username, $db_password) || log_and_die "cannot connect the database";

if($db_type eq "Pg") {
        $sql_cond = "date_part('epoch',now())-date_part('epoch',date)";
} elsif($db_type eq "mysql") {
        $sql_cond = "unix_timestamp(now())-unix_timestamp(date)";
}

$sql = "
        SELECT id,mailbox,src_server,src_auth,src_user,src_password,src_folder,fetchall,keep,pr
otocol,mda,extra_options,usessl
        FROM fetchmail
        WHERE $sql_cond  > poll_time*60
        ";

my (%config);
map{
        my ($id,$mailbox,$src_server,$src_auth,$src_user,$src_password,$src_folder,$fetchall,$keep,$protocol,$mda,$extra_options,$usessl)=@$_;

        syslog("info","fetch ${src_user}@${src_server} for ${mailbox}");

        $cmd="user '${src_user}' there with password '".decode_base64($src_password)."'";
        $cmd.=" folder '${src_folder}'" if ($src_folder);
        $cmd.=" mda ".$mda if ($mda);

#       $cmd.=" mda \"/usr/local/libexec/dovecot/deliver -m ${mailbox}\"";
        $cmd.=" is '${mailbox}' here";

        $cmd.=" keep" if ($keep);
        $cmd.=" fetchall" if ($fetchall);
        $cmd.=" ssl" if ($usessl);
        $cmd.=" ".$extra_options if ($extra_options);

        $text=<<TXT;
set postmaster "postmaster"
set nobouncemail
set no spambounce
set properties ""
set syslog

poll ${src_server} with proto ${protocol}
        $cmd

TXT

  ($file_handler, $filename) = mkstemp( "/tmp/fetchmail-all-XXXXX" ) or log_and_die "cannot open/create fetchmail temp file";
  print $file_handler $text;
  close $file_handler;

  $ret=`/usr/bin/fetchmail -f $filename -i $run_dir/fetchmail.pid`;

  unlink $filename;

  $sql="UPDATE fetchmail SET returned_text=".$dbh->quote($ret).", date=now() WHERE id=".$id;
  $dbh->do($sql);
}@{$dbh->selectall_arrayref($sql)};

$lockmgr->unlock($lock_file);
closelog();


Так вот, если запускаю руками с консоли, то все нормально

Код: Выделить всё

# sudo -H -u vmail /usr/share/postfixadmin/ADDITIONS/fetchmail.pl

Почту забирает и кладет по нужным ящикам
А вот если ставлю в крон такую строку

Код: Выделить всё

*/10 * * * * root /usr/share/postfixadmin/ADDITIONS/fetchmail.pl

ругается

Код: Выделить всё

fetchmail: WARNING: Running as root is discouraged.

Что в свою очередь верно, ставлю такую строку

Код: Выделить всё

*/10 * * * * root sudo -H -u vmail /usr/share/postfixadmin/ADDITIONS/fetchmail.pl

Ругается

Код: Выделить всё

sudo: sorry, you must have a tty to run sudo

Если так ставлю

Код: Выделить всё

*/10 * * * * vmail /usr/share/postfixadmin/ADDITIONS/fetchmail.pl

Тогда так ругается

Код: Выделить всё

//.fetchmail.pid: Permission denied
fetchmail: lock creation failed.


Подскажите как правильно в крон поставить задание? Юзер vmail есть от него вся почта работает.


Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Postfixadmin и fethmail

Сообщение sash-kan »

Ale][R писал(а):
02.06.2010 10:40
you must have a tty to run sudo
по этому поводу: надо разрешить запуск sudo без отведения tty. или глобально (с точки зрения ынтырпрайза — плохое решение) или для конкретного пользователя/группы.
здесь оба решения приводятся: http://www.zimbra.com/forums/installation/...y-run-sudo.html
(кстати, первая ссылка по запросу google://you+must+have+a+tty+to+run+sudo).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Ale][R
Сообщения: 60
ОС: CentOS

Re: Postfixadmin и fethmail

Сообщение Ale][R »

Спасибо огромное.
Спасибо сказали:
Ответить