Для того чтобы остановить выполнение `tcpdump` после завершения вызова в Asterisk, вы можете использовать два подхода.
### 1. Использование `AGI` и `Sub-context`
Вы уже запустили `tcpdump` через `AGI`, но вам нужно будет как-то определить момент окончания вызова и выполнить команду остановки. Один из способов — создать отдель контекст для завершения вызова. Вы можете сделать что-то подобное:
```ini
[from-internal-custom]
exten => _X.,1,AGI(tcpdump_ata_fxo.sh,start,${UNIQUEID})
exten => _X.,n,Wait(1) ; Небольшая задержка для стабильности
exten => _X.,n,Hangup()
exten => _X.,n,AGI(tcpdump_ata_fxo.sh,stop,${UNIQUEID})
; Контекст, куда попадёт вызов после завершения
exten => h,1,AGI(tcpdump_ata_fxo.sh,stop,${UNIQUEID})
```
В данном примере мы запускаем `tcpdump` при входящем звонке и останавливаем его при завершении вызова с помощью обработчика `h`, который срабатывает при завершении вызова.
### 2. Использование функции `h`
Дополнительно, вы можете использовать специальный контекст для завершения вызова:
```ini
[from-internal-custom]
exten => _X.,1,AGI(tcpdump_ata_fxo.sh,start,${UNIQUEID})
exten => _X.,n,Hangup()
exten => _X.,n,AGI(tcpdump_ata_fxo.sh,stop,${UNIQUEID})
; Запуск AGI для остановки после Hangup
exten => h,1,AGI(tcpdump_ata_fxo.sh,stop,${UNIQUEID})
```
### Пример скрипта tcpdump_ata_fxo.sh
Ваш скрипт `tcpdump_ata_fxo.sh` должен корректно обрабатывать команды `start` и `stop`. Пример:
```bash
#!/bin/bash
# Непосредственно путь к файлу для захвата.
DUMP_DIR="/tmp/tcpdump"
case "$1" in
start)
mkdir -p $DUMP_DIR
tcpdump -i any -w "${DUMP_DIR}/call_${2}.pcap" &
echo $! > "${DUMP_DIR}/tcpdump_pid_${2}.pid"
;;
stop)
if [ -f "${DUMP_DIR}/tcpdump_pid_${2}.pid" ]; then
kill $(cat "${DUMP_DIR}/tcpdump_pid_${2}.pid")
rm "${DUMP_DIR}/tcpdump_pid_${2}.pid"
fi
;;
esac
```
### Заключение
Таким образом, вы сможете запустить `tcpdump` в момент начала вызова и корректно остановить его при завершении. При этом жильцы в вашем скрипте корректно обрабатываются через `AGI`. Не забудьте также проверить разрешения на создание/удаление файлов в целевой директории.