Пишу скрипт на Perl для озвучки с помощью RHvoice, смысл в том что на определенный адрес и порт приходит номер и фраза, скрипт разбивает на отдельные переменные номер и фразу, фразу он пересылает в RHvoice. Скрипт работает корректно, если ему передать параметры напрямую, через консоль, если передавать телнетом - выдает ошибку «segfault at 0 ip 00007fde77f76321 sp 00007fff4800be58 error 4 in libc-2.15.so». Фраза передается на порт 9988 через xinetd, запуск от рута.
#!/usr/bin/perl -CSDA
use strict;
use Sys::Syslog;
use Socket;
use Time::localtime;
use encoding 'utf8';
my $Message;
while (<STDIN>)
{
$Message =$_;
# $Message = utf8::encode($Message);
# chomp ($Message);
syslog('info', "$Message");
my @str = split(';', $Message);
# chomp($str[1]);
# chomp($str[0]);
$str[0] =~ s/[\r\n\a]*$//;
$str[1]=~ s/[\r\n]*$//;
print "$str[0]\n";
print "$str[1]\n";
my $pid = ` ps -ef | fgrep festival_ami.pl`;
if(length($str[0]) && length($str[1]) > 0) {
syslog('info', "tel:$str[0] - Message:$str[1] $pid ") ;
} else {
syslog('info', "error string is empty");
}
# ` cat /usr/share/asterisk/agi-bin/text.txt | RHVoice -o /usr/share/asterisk/agi-bin/'$str[0]'.wav`;
system ("echo '$str[1]' | RHVoice > '$str[0]'.wav");
202.wav");
`sox /usr/share/asterisk/agi-bin/$str[0].wav -r 8000 -c 1 /usr/share/asterisk/agi-bin/$str[0].gsm`;
`rm $str[0].wav`;