Tamkovich.com: Телеком/VoIP блог
Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys
AGI: Failed to execute ‘/var/lib/asterisk/agi-bin/mu.agi’: Permission denied
Октябрь 23rd, 2009 by Сергей Тамкович
Asterisk AGIЕсли, вы проверили права на скрипт, на директорию agi-bin, их владельца, а Asterisk, по непонятным причинам, отказывается запустить Ваш AGI скрипт возможно проблема в том, что ваша операционная система устарела. Обычно подобные ошибки выглядят вот так:
-- Executing [*99@7:1] AGI("SIP/1007-09d78670", "smartoffice,xxx") in new stack -- Launched AGI Script /var/lib/Asterisk/agi-bin/smartofficeAGI Tx >> agi_request: smartoffice AGI Tx >> agi_channel: SIP/1007-09d78670 AGI Tx >> agi_language: ru AGI Tx >> agi_type: SIP AGI Tx >> agi_uniqueid: 1256325972.1 AGI Tx >> agi_version: SVN-branch-1.6.0-r225583M AGI Tx >> agi_callerid: 1007 AGI Tx >> agi_calleridname: unknown AGI Tx >> agi_callingpres: 0 AGI Tx >> agi_callingani2: 0 AGI Tx >> agi_callington: 0 AGI Tx >> agi_callingtns: 0 AGI Tx >> agi_dnid: *99 AGI Tx >> agi_rdnis: unknown AGI Tx >> agi_context: 7 AGI Tx >> agi_extension: *99 AGI Tx >> agi_priority: 1 AGI Tx >> agi_enhanced: 0.0 AGI Tx >> agi_accountcode: AGI Tx >> agi_threadid: 146017168 AGI Tx >> agi_arg_1: xxx AGI Tx >> AGI Rx << verbose "Failed to execute '/var/lib/Asterisk/agi-bin/smartoffice': Permission denied" 2 == smartoffice,xxx: Failed to execute '/var/lib/Asterisk/agi-bin/smartoffice': Permission denied <SIP/1007-09d78670>AGI Tx >> 200 result=1 [Oct 23 23:26:12] WARNING[4681]: res_agi.c:2801 run_agi: unable to send SIGHUP to AGI process 4682: No such process
С этой проблемой я столкнулся после очередного обновления Asterisk. А точнее после ревизии 172503 (5 января 2009 года). Изменения в этой ревизии манипулируют способностями форкнутых процессов с помощью libcap. На операционной системе Centos 5.x данное изменение не вызвало никаких неприятностей. А вот на другой системе, где установлена Fedora 8, AGI скрипты не работали с января. Проблема кроется в файле res/res_agi.c:
681 682 683 684 685 686 687 688 689 | #ifdef HAVE_CAP cap_t cap = cap_from_text("cap_net_admin-eip"); if (cap_set_proc(cap)) { /* Careful with order! Logging cannot happen after we close FDs */ ast_log(LOG_WARNING, "Unable to remove capabilities.\n"); } cap_free(cap); #endif |
Скорее всего, суть проблемы заключается в специфической обработке способностей «cap_net_admin-eip» в старых дистрибутивах. Самое простое решение — закомментировать данный кусок кода.
Asterisk AGI
exten => 9,1,AGI(«/usr/bin/php»,»/var/lib/Asterisk/agi-bin/somescript.php»,${OrderID})