Спасибо за ответ и по "багу", и на незаданный вопрос!
1) Очень хорошо, что бага воспроизводится только при очень специфичных условиях.
2) "Попробуйте через кастомизацию системных файлов поправить /etc/asterisk/modules.conf" - этим озадачилась же в первую очередь, и получилось, что: модуль cdr_custom.so подгружается, но не работает без уже подгруженного cdr_csv.so, а вот cdr_csv.so хоть и прописан в автозагрузку, но - не загружается почему-то, пришлось городить "костыль" с @reboot в кроне.
3) Спасибо за наводку на /offload/rootfs/usr/www/src/Core/Asterisk/Configs , попробую. Мне придётся ещё и CdrConf.php дописать, добавить секцию [csv].
DISCLAIMER для пользователей MikoPBX! Всё означенное ниже - нужно только мне для тестовых целей, не делайте этого на продакшене! Всё , что вы сделаете из нижеперечисленного - последствия на Ваш страх и риск!
1) Кастомизация системного файла /var/spool/cron/crontabs/root вида "@reboot /path/to/some/script"
2) Правка и создание новых файлов /offload/rootfs/usr/www/src/Core/Asterisk/Configs*.php
3) Сборка и затаскивание в /offload/asterisk/modules/ самосборных модулей, особенно с подгрузкой их через конфиг /etc/asterisk/modules.conf
P.S. Создание нового файла с новым классом в /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrCustomConf.php не сработало (то есть файл есть, симлинк как вы советовали). в отличие от правки существующего CdrConf.php
~# ls -l /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrConf.php /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrCustomConf.php
lrwxrwxrwx 1 www www 68 Jul 8 12:02 /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrConf.php -> /storage/usbdisk1/mikopbx/custom_modules/CustomModuleCsv/CdrConf.php
lrwxrwxrwx 1 www www 74 Jul 8 12:23 /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrCustomConf.php -> /storage/usbdisk1/mikopbx/custom_modules/CustomModuleCsv/CdrCustomConf.php
Содержание CdrCustomConf.php
<?php
namespace MikoPBX\Core\Asterisk\Configs;
class CdrCustomConf extends CoreConfigClass
{
protected string $description = 'cdr_custom.conf';
protected function generateConfigProtected(): void
{
$cal = 'clid, src, dst, dcontext, channel, dstchannel, lastapp, lastdata, start, answer, end, duration, billsec, disposition, amaflags, accountcode, uniqueid, userfield, sequence, linkedid';
$columns = explode(', ', $cal);
$values = '';
foreach ($columns as $key => $value) {
$values .= ($values == '') ? "" : ",";
$values .= "\${CSV_QUOTE(\${CDR($value)})}";
}
$conf = "[mappings]\n" .
"Simple.csv => \${CSV_QUOTE(\${EPOCH})},\${CSV_QUOTE(\${CDR(src)})},\${CSV_QUOTE(\${CDR(dst)})} \n";
"Master.csv => $values \n";
file_put_contents($this->config->path('asterisk.astetcdir') . "/cdr_custom.conf", $conf);
}
}
Не создается файл /etc/asterisk/cdr_custom.conf