Проверить работу модуля php

Как проверить, работает ли скрипт php

У меня есть PHP script, который прослушивает очередь. Теоретически, он никогда не должен умирать. Есть ли что-то, чтобы проверить, все ли работает? Что-то вроде Ruby God ( http://god.rubyforge.org/ ) для PHP ? Бог является агностиком языка, но было бы неплохо иметь решение, которое работает и с окнами.

12 ответов

У меня была такая же проблема — я хочу проверить, работает ли script. Поэтому я придумал это, и я запускаю его как работу cron. Он захватывает запущенные процессы как массив и циклически выполняет каждую строку и проверяет имя файла. Кажется, хорошо работает. Замените # user # вашим пользователем script.

exec("ps -U #user# -u #user# u", $output, $result); foreach ($output AS $line) if(strpos($line, "test.php")) echo "found"; 
$output = shell_exec('ps -C php -f'); if (strpos($output, "php my_script.php")===false) < shell_exec('php my_script.php >/dev/null 2>&1 &'); > 

В приведенном выше коде перечислены все запущенные процессы php, а затем проверяется, находится ли «my_script.php» в списке запущенных процессов, если он не запускает этот процесс и не ждет завершения процесса для продолжения делая то, что он делает.

Просто добавьте вторую команду после script. Когда/если он останавливается, вызывается вторая команда. Например:.

Edit:

Технически это вызывает почтовый клиент сразу, но только завершает команду, когда заканчивается php script. Выполнение этого позволяет получить вывод php- script и включить в тело письма, что может быть полезно для отладки, что привело к остановке script.

Читайте также:  Python как настроить сервер

Нет, во время работы php команда mail запускается. Но, как только он останавливается, он отправляет EOF, что заставляет почтовик отправлять почту

У меня есть несколько длинных PHP-скриптов, у которых оболочка script обертывает его. Вы можете по желанию вернуть значение из script, которое будет проверено в shell- script, для выхода, перезагрузки немедленно или спящего режима в течение нескольких секунд, а затем перезапустите.

Вот простой, который просто запускает PHP script, пока он не будет остановлен вручную.

#!/bin/bash clear date php -f cli-SCRIPT.php echo "wait a little while . "; sleep 10 exec $0

«exec $0» перезапускает script, не создавая подпроцесс, который придется разгадать позже (и занять ресурсы в это время). Этот bash script обертывает почтового отправителя, поэтому это не проблема, если он выйдет и приостанавливается на мгновение.

Это почти то же самое, что и сценарий Бога, который я сейчас использую, и определенно лучше, чем ожидание занятого.

#!/bin/bash while [true]; do if ! pidof -x script.php; then PHP скрипт.php & fi done 

В этом так много неправильного, я не могу в это поверить. [True] является недопустимым синтаксисом, и вы можете избавиться от if, просто подождав окончания сценария php.

Я использовал cmder для Windows и на основе этого script Я придумал этот, который мне удалось развернуть на linux позже.

#!/bin/bash clear date while true do php -f processEmails.php echo "wait a little while for 5 secobds. "; sleep 5 done 

Если у вас возникли проблемы с проверкой непосредственно на PHP script, вы можете создать тривиальную оболочку и проверить ее. Я недостаточно разбираюсь в сценариях Windows, чтобы указать, как это делается здесь, но в Bash это будет выглядеть как.

Затем вы просто проверите обертку, как если бы вы проверили любой другой bash script: pidof -x wrapper_for_test_php.sh

Вдохновленный от Джастина Левене ответил и улучшил его, поскольку ps -C не работает на Mac, что мне нужно в моем случае. Таким образом, вы можете использовать это в PHP скрипт (возможно, только до того, как вам понадобится демон), протестирован как в Mac OS X 10.11.4, так и в Ubuntu 14.04:

$daemonPath = "FULL_PATH_TO_DAEMON"; $runningPhpProcessesOfDaemon = (int) shell_exec("ps aux | grep -c '[p]hp ".$daemonPath."'"); if ($runningPhpProcessesOfDaemon === 0) < shell_exec('php ' . $daemonPath . ' >/dev/null 2>&1 &'); > 

Маленькая, но полезная деталь: Почему grep -c ‘[p]hp . ‘ вместо grep -c ‘php . ‘ ?

Потому что при подсчете процессов grep -c ‘php . ‘ будет учитываться как процесс, который соответствует нашему шаблону. Поэтому использование регулярного выражения для первой буквы php делает нашу команду отличной от шаблона, который мы ищем.

Вы можете написать в своем crontab что-то вроде этого:

0 3 * * * /usr/bin/php -f /home/test/test.php my_special_cron 

Ваш файл test.php должен выглядеть следующим образом:

Таким образом у вас будет только один активный запуск задания cron с my-special-cron в качестве ключа процесса. Таким образом, вы можете добавить больше заданий в один и тот же php файл.

test.php system_send_emails sendEmails

test.php system_create_orders orderExport

Просто добавьте вторую команду после script. Когда/если он останавливается, вызывается вторая команда. Например:.

Это вызовет mail каждый раз, когда строка будет напечатана в файле daemon.php(это должно быть никогда, но все же.)

Вместо этого используйте оператор двойной амперсанды для разделения команд, т.е.

Вы используете только один & здесь, и ваш комментарий не соответствует действительности. почта не отправляется в каждой строке, она отправляется только в EOF

Если у вас есть руки на script, вы можете просто попросить его установить значение времени каждые X раз в db, а затем дать задание cron проверить, соответствует ли это значение.

Источник

Заметки системного администрирования биллинга Mikbill

Очень простой и полезный скрипт для проверки модулей php, которые нужны mikbill
Можно, конечно командой php -m долго сравнивать чего не хватает, скрипт это и делает автоматически.

В случае проблем укажет каких модулей не хватает

Необязательные модули

Старые версии

#!/bin/bash
if [ «$(which php)» != «» ] ; then
file=modules_in_system
modules=( bcmath bz2 calendar Core ctype curl date iconv imap json dom ereg exif fileinfo filter ftp gd gettext
gmp hash libxml mbstring mysql mysqli openssl pcntl pcre PDO pdo_mysql Phar posix pspell readline recode
Reflection session shmop SimpleXML snmp soap sockets SPL standard sysvmsg sysvsem sysvshm tokenizer wddx
xml xmlreader xmlrpc xmlwriter xsl zip zlib )
php -m>$file
missed=0
for item in «$»; do
if ! grep -q -w «$item» modules_in_system ; then
echo -e «$item \e[31m no module \e[0m»
let «missed=1»
fi
done
if [ «$missed» -eq «0» ];then
echo -e «\e[33m modules OK \e[0m»
fi
rm -f $file
else
echo -e «\e[31m php not installed \e[0m»
fi

#!/bin/bash
file=modules_in_system
modules=( bcmath bz2 calendar Core ctype curl date iconv imap json dom ereg exif fileinfo filter ftp gd gettext
gmp hash libxml mbstring mysql mysqli openssl pcntl pcre PDO pdo_mysql Phar posix pspell readline recode
Reflection session shmop SimpleXML snmp soap sockets SPL standard sysvmsg sysvsem sysvshm tokenizer wddx
xml xmlreader xmlrpc xmlwriter xsl zip zlib )
php -m>$file
missed=0
for item in «$»; do
if ! grep -q -w «$item» modules_in_system ; then
echo -e «$item \e[31m no module \e[0m»
let «missed=1»
fi
done
if [ «$missed» -eq «0» ];then
echo -e «\e[33m modules OK \e[0m»
fi
rm -f $file

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Комментарии

Отправить комментарий

Популярные сообщения из этого блога

Zabbix agent установка и настройка

Изображение

Zabbix agent — основная информация Важное преимущество — разработан командой Zabbix именно под свой Zabbix server. — разработан на языке C — может собирать данные с процессора, памяти, диска и сетевого интерфейса — малый размер и низкий ресурс — благодаря малой занимаемой площади и широкой настройкой агент может работать на устройствах с ограниченными ресурсами — конфигурации мониторинга централизованы на сервере Zabbix, что упрощает управление агентом Zabbix — может использовать один файл конфигурации на всех серверах. — может работать на различных поддерживаемых платформах, включая Linux, UNIX и Windows Linux IBM AIX FreeBSD NetBSD OpenBSD HP-UX Mac OS X SolarisWindows: все версии для рабочих станций и серверов начиная с 2000 Функции агента Ниже приведен список проверок Zabbix агента из коробки. Следует отметить, однако, что встроенные функции агента могут быть расширены с помощью следующих методов: загружаемые модулей , пользовательских п

mikbill расшифровка завершений сессий

Сессии Lost-Сarrier Потеря несущей, чаще всего у абонента потери в? локалке? и нужно проверять?физику линии. Так же может быть вызвано отключением? подключения по локальной сети? у абонента вместо отключения ?интернет соединения? Для Wi-Fi и других роутеров означает что выключили питание на этом устройстве. User-Request Нормальное завершение Сессии. Пользователь закрыл соединение. Online Пользователь находится в интернете. Admin-Reboot Перезагрузка сервера доступа(NAS). Сервер корректно завершил соединение. BILL-Request Выброшен из интернета из админки биллинга. NAS-Request Сервер доступа по запросу завершил сессию ( те кто-то его выкинул ). NAS-Error Вызвана неправильными параметрами сессии, устранять администратору. Port-Error Вызвана неправильными параметрами сессии, устранять администратору. Admin Reset Сессия или порт сброшены администратором. User Error Ошибка в полученных от пользователя данных, вызвавшая прекращение сеанса

Accel-ppp команды

Просмотр активных сессий: accel-cmd show sessions Количество сессий accel-cmd show sessions| wc -l Количество сессий в ожидании accel-cmd show sessions|grep start| wc -l Прервать сессию: accel-cmd terminate ip 1.2.3.4 Перечитать конфигурацию: accel-cmd reload Просмотр логов: tail -f /var/log/accel-ppp/accel-ppp.log Остановить accel: /etc/init.d/accel stop Запустить accel: /etc/init.d/accel start Аптайм accel-cmd show stat uptime Firewall: Запустить (создает правила) /etc/init.d/firewall start Остановить (удаляет все правила): /etc/init.d/firewall stop Перезапустить (удаляет и заново создает правила): /etc/init.d/firewall restart Обновить список разрешенных сайтов/IP: /etc/init.d/firewall allow Обновить цепочку правил forward: /etc/init.d/firewall forward Обновить цепочку правил prerouting: /etc/init.d/firewall pre Обновить цепочку правила postrouting /etc/init.d/firewall po

Источник

Оцените статью