LINUX.ORG.RU

Asterisk. Время модификации файла.

 , ,


0

1

Всем привет! Подскажите пожалуйста, как решить данную проблему: При создании .call-файла, необходимо задать его исполнение через 100 секунд(к примеру). Когда .call-файл создан, меняю его время, а после перемещаю его в папку outgoing, следовательно опять модифицирую, и время его модификации становится текущим(а не на 100 сек больше). Как можно сделать так что бы, в скрипте преобразовать его время в «будущее», переместить в outgoing, что бы астер дожидался его времени исполнения?


DATE=`date '+%H.%M.%S_%d-%m-%y'`
NOW=`date +%s`
let NOW=$NOW+100
chown  root:asterisk /var/spool/asterisk/$1.call
TOUCH_TMSP=`date -d "1970-01-01 $NOW sec GMT" +%Y%M%d_%H-%M-%S`
touch -t $TOUCH_TMSP /var/spool/asterisk/$1.call
mv /var/spool/asterisk/$1.call  /var/spool/asterisk/outgoing/"$1"_"$DATE".call

exit 0

думал есть подходящие параметры к команде mv как к cp, но нет...


Ответ на: комментарий от ptah_alexs

А вообще в man cp есть -p Сохраняет исходные параметры файла, такие как владелец, группа, права доступа (включая suid и sgid биты), время последней модификации и время последнего доступа к файлу. В случае, если установка владельца или группы приводит к ошибке, suid и sgid биты сбрасываются. (Заметим, что впоследствии исходный файл и его копия могут иметь разное время последнего доступа, так как операция копирования является доступом к исходному файлу).

ptah_alexs ★★★★★ ()
Ответ на: комментарий от ptah_alexs

я знаю про cp -p =)

cp не подходит же для астера(можно, но лучше не делать, есть вероятность, что при копировании потеряется часть информации, или астер начнет обрабатывать еще не скопировавшийся call файл, он очень резко обрабатывает их). mv же по другому работает в этом случае...

amonr ()

Ты уверен что у тебя touch отрабатывает?

Я сейчас сделал:

$ ls -l
-rw-r--r-- 1 user user     7 дек  7 08:37 test
$ touch -t 1708120000 test
$ ls -l
-rw-r--r-- 1 user user     7 авг 12  2017 test
$ cp -p test ~/tst/
$ ls -l
-rw-r--r-- 1 user user    7 авг 12  2017 test
$ mv test ~/tst/
$ ls -l
-rw-r--r-- 1 user user    7 авг 12  2017 test
ptah_alexs ★★★★★ ()
Последнее исправление: ptah_alexs (всего исправлений: 1)
Ответ на: комментарий от ptah_alexs

Однако, да, ты прав, не отрабатывает, и понять в чем причина не могу..( В переменную же вроде записывается правильное время (в TOUCH_TMSP), да и синтаксис touch работы с переменными вроде бы верный у меня, права полные дал скрипту, да и от рута работаю...

В чем может быть причина?

amonr ()
Ответ на: комментарий от amonr

не могу понять, в консоле все работает - скрипт отдельно от астера: в скрипт передаю номер на основе которого создается call файл, после все действия проходят, проверяю по stat все нормально поле модификации изменяется. Как только выполняю скрипт из астера, так он не хочет этого делать хоть и от рута пользуюсь, да и права я ему дал...

#!/bin/sh
number=$1 do     #получаем значение из диалплана, тел на который звоним, что бы перезвонить ему
cat <<EOF  >  /var/spool/asterisk/$1.call

Channel: SIP/$1
Callerid: Admin
MaxRetries: 3
RetryTime: 20
WaitTime: 30
Context: out_voicemessage
Extension: s
Priority: 1
Archive: yes

EOF

DATE=`date '+%Y%m%d%H%M'`
NOW=`date +%s`
let NOW=$NOW+100

#echo "$DATE"
#echo "$NOW"

chown  root:asterisk /var/spool/asterisk/$1.call
TOUCH_TMSP=`date -d "1970-01-01 $NOW sec GMT" +%Y%m%d%H%M`

#echo "$TOUCH_TMSP"

touch -m -t $TOUCH_TMSP $1.call
#stat $1.call

mv /var/spool/asterisk/$1.call /var/spool/asterisk/tmp/"$1"_"$TOUCH_TMSP".call
#mv /var/spool/asterisk/$1.call  /var/spool/asterisk/outgoing/"$1"_"$TOUCH_TMSP".call

exit 0

Что по части статики: если везде заменить $1 на конкретный номер (прим. 700), и запустить скрипт просто из консоли, все нормально проходит. Как только астер запускаю, соответственно убираю #, он все делает но только не меняем время модификации файла.

amonr ()
Ответ на: комментарий от ptah_alexs

переделал, но все равно... не получается. ибо после перемещения файла он обновляет все параметры модиф\доступ у этого файла. Даже если в конца скрипта написать команды touch, после mv, он не успевает обновить параметры. Жестко он с call-файлами обходится(

amonr ()
Ответ на: комментарий от ptah_alexs

http://asterisk.ru/knowledgebase/Asterisk auto-dial out

хотя вот тут говорится, если поменять mtime у этого файла, и отправить его в outgoing, то астер будет дожидаться времени совпадения на сервере и исполнения файла. Менял, тоже не помогло. Может астеру прав не хватает, но вроде бы chown отрабатывает свое..

amonr ()