В графическом интерфейсе FreePBX существует коммерческий модуль SysAdmin Pro, стоимость которого составляет $25 (на 21 ноября 2018 года это 0 руб.). Мы не ищем легких путей, поэтому, мы разработали скрипт, который позволяет автоматически обновлять все доступные для апгрейда модули по заданному расписанию. Спешим поделиться :)
КАК РАБОТАЕТ СКРИПТ
Важно: Наш скрипт разработан для FreePBX 13, так как использует командную оболочку fwconsole. Чтобы адаптировать скрипт под более ранние версии, вы можете использовать amportal в 11 и 13 строчках.
Создаем служебные для скрипта файлы:
[root@asterisk ~]#touch /home/admin/log_mail.txt
[root@asterisk ~]#touch /home/admin/upgradestatus.txt
Итак, скрипт имеет следующее содержание:
#!/bin/sh
LOGSIZE=`ls -l /home/admin/log_mail.txt | awk '{ print $5 }'` \\формируем размер лог - файла, в который мы будем записывать события в работе нашего скрипта
upgradable=`fwconsole ma -f showupgrades | grep Upgradable` \\команда проверяет, есть ли доступные для обновления модули
FILENAME=/home/admin/upgradestatus.txt \\созданный нами ранее файл, в который мы будем записывать вывод команды выше, в котором мы проверяем доступные для апгрейда модули
LOGFILE=/home/admin/log_mail.txt \\путь к лог - файлу
DATE="`date +%d.%m.%Y" "%H:%M:%S`" \\дата, которую мы будем использовать для вывода в лог - файле
echo "$upgradable" > /home/admin/upgradestatus.txt \\записываем результат проверки доступных для обновления модулей в файл для хранения
FILESIZE=$(stat -c%s "$FILENAME") \\после записи в файл, записываем размер этого файла в переменную
if [ $FILESIZE -ne 1 ]; then \\проверяем размер. Если размер отличается от единицы, то выполняем обновление модулей. В ином случае просто записываем в лог – файл информацию, о том, что доступных для апгрейда модулей нет
sleep 5 \\ждем 5 секунд
echo `fwconsole ma upgradeall` \\ даем команду для обновления всех модулей
sleep 30 \\после этого ждем 30 секунд
echo `fwconsole r` \\перезагружаем FreePBX
sleep 10 \\ждем еще 10 секунд
echo "OK :: $DATE :: all modules were successfully upgraded" >> "$LOGFILE" \\записываем в лог – файл информацию о том, что модули были обновлены
else \\случай, если размер файла равен или меньше единицы
echo "OK :: $DATE :: there is no upgradable modules" >> "$LOGFILE" \\если у нас нет модулей для обновления, делаем соответствующую пометку в лог - файле
fi
if [ $LOGSIZE -ge 150000 ]; then \\проверяем размер лог – файла. Если он достиг 150 кБ, то мы его опустошаем
cat /dev/null > /home/admin/log_mail.txt
fi
cat /dev/null > /home/admin/upgradestatus.txt \\опустошаем файл, в который мы записываем результат проверки доступных для апгрейда модулей
Готово. Сам скрипт вы можете скачать по ссылке ниже. Не забудьте изменить расширение файла на .sh перед копированием на сервер:
РАБОТА СКРИПТА ПО РАСПИСАНИЮ
После того, как вы сохранили скрипт на своем компьютере его необходимо перенести на сервер. Мы рекомендуем воспользоваться SFTP клиентом, например, WinSCP, с помощью которого, можно подключиться по SSH реквизитам к серверу и закинуть файл скрипта в удобную для вас директорию. Предположим, вы закинул файл upgrade.sh в директорию /home:
[root@asteriskpbx]# dos2unix /home/upgrade.sh //преобразуем скрипт для автоматического обновления модулей
[root@asteriskpbx]# chmod 777 /home/upgrade.sh //дадим необходимые права скрипту
Проверим скрипт дебагом. Делается следующей командой:
[root@asterisk home]# bash -x upgrade.sh
Если все корректно и скрипт не имеет ошибок, то вы увидите следующий вывод, в котором будет пошагово проиллюстрирована работа скрипта:
Теперь переходим к расписанию для скрипта. Настройку выполнять будем с помощью cron:
[root@asteriskpbx]# crontab -e
В нашем случае, мы хотим чтобы скрипт выполнялся ежедневно в полночь. Для этого, вносим следующие изменения в файл:
0 0 * * * /bin/bash /home/upgrade.sh >/dev/null
Сохраняем изменения, нажав F2, затем Yes и Enter. Готово! Теперь каждый день, в полночь, при доступности обновления, модули вашего FreePBX 13 будут обновлены.