Привожу живой пример из личной продакшн практики. PHP-CLI скрипт как запускаемое приложение
Начальные условия:
Наличие GNU Linux (в моём случае это Debian)
Установленные пакет php, php-cli, остальные по вкусу и зависимостям
В качестве таймера используется класс React\EventLoop\Factory
1. Создаём пустой файл, можно без разрешения (например daemon), открываем в текстовом редакторе
Важно, чтобы в начале была строка #!/usr/bin/php -q
2. Пишем
#!/usr/bin/php -q
<?php
ini_set("display_errors", 1);
error_reporting(E_ERROR);
require "/var/project/vendor/autoload.php";
require '/var/project/bin/cli_config.php';
use Ratchet\Session\SessionProvider;
$loop = React\EventLoop\Factory::create();
//вызовы $loop->addPeriodicTimer можно ставить в нужном количестве, первый параметр - количество секунд
$loop->addPeriodicTimer(120, function(){
//код здесь будет выполняться каждые 120 секунд
});
//если нужен повторяющийся цикл
//$loop->run();
//а если нужен один раз на вызов
$loop->tick();
3. chmod a+x /www/project/bin/daemon - даём права на выполнение
4. запускаем ./daemon будучи в папке с файлом. Если ошибок нет, всё будет работать
5. А ещё скрипт можно установить как демон в systemd и управлять с помощью /etc/init.d/daemon.service (start|stop|restart) и есть ещё bash-скрипт который будет держать службу на контроле и перезапускать если что, так как не всегда ошибка возвращает код и systemd считает, что процесс не упал, а его остановили, но это уже другая история
6. Для решения задачи "Требуется по запросу юзера (нажал кнопку) вести отсчет таймера от 120 секунд до 0 и произвести действие" в php на действие пользователя просто запустить exec('/var/project/daemon', $output_1, $exitval);