Или, если у вас есть только учетная запись пользователя, вы можете запустить ее в сеансе экрана. Тогда вы даже можете посмотреть вывод для диагностики ошибок.

дал таблицу базы данных Email-Queue. Я добавлю в эту таблицу все электронные письма, которые необходимо отправить моему PHP-приложению.

Затем другой скрипт PHP будет искать все неотправленные письма и отправлять их.

Я запускаю этот скрипт, используя cronjobs. К сожалению, cronjobs может работать только максимум раз в минуту. Поэтому в худшем случае пользователь должен подождать одну минуту, пока его электронная почта действительно не будет отправлена.

Моя текущая идея для обхода проблемы заключается в вызове сценария с дополнительным параметром sleep и дублировании cronjobs.

Пример:

* * * * * curl emails.php?sleep=0 >/dev/null 2>&1
* * * * * curl emails.php?sleep=10 >/dev/null 2>&1
* * * * * curl emails.php?sleep=20 >/dev/null 2>&1
* * * * * curl emails.php?sleep=30 >/dev/null 2>&1
* * * * * curl emails.php?sleep=40 >/dev/null 2>&1
* * * * * curl emails.php?sleep=50 >/dev/null 2>&1

В приведенном выше примере скрипт будет запускаться каждые 10 секунд. Первая строка скрипта emails.php будет выглядеть так:

sleep($_REQUEST['sleep']);
 user55784612 янв. 2011 г., 20:14
Вам нужен демон php, а не скрипт cron.
 EboMike12 янв. 2011 г., 19:21
На сайте superuser.stackexchange.com может быть больше знающих людей.

Ответы на вопрос(4)

Решение Вопроса

троки, а не curl для вызова скрипта. Затем вы можете создать скрипт PHP с разумным сроком службы, который не ограничен необходимостью вывода ответа в течение определенного периода времени.

Таким образом, вы можете просто спать / проверять электронную почту / передавать / спать и т. Д. Внутри сценария PHP, а не использовать Cron без необходимости.

Кроме того, я бы позаботился о том, чтобы несколько PHP-скриптов не работали с таблицей базы данных одновременно, используя подход pid-файла или настройку базы данных (если данный файл / параметр существует / установлен, прервать обработку ) или разумно синхронизировать задание cron и ограничить максимальное время обработки скрипта, проверив, как долго он выполняется до начала части цикла «проверка сообщений».

Это должно быть сделано на уровне сценария.

// cron.php running every 10 seconds

<?php

$expireTime = time() + 60;
while (time() < $expireTime) {
     // my php logic here

     sleep(10); 
     // sleep for 10 seconds
     // you may change the sleep time to change frequency
}

который можно использовать с crontab для запуска чаще, чем за 1 минуту.

Вы можете сохранить его как ~ / bin / runEvery.sh, а затем в crontab написать что-то вроде этого, чтобы запускать otherScript.sh каждые 5 секунд:

*/1 * * * * ~/bin/runEvery.sh 5 otherScript.sh

Это скрипт:

#!/bin/bash

inputPeriod=$1
runCommand=$2
RUN_TIME=60
error="no"

if [ 'x'"$runCommand" != 'x' ]
then
    if [ 'x'$inputPeriod != 'x' ]
    then
        loops=$(( $RUN_TIME / $inputPeriod ))
        if [ $loops -eq 0 ]
        then
            loops=1
        fi

        for i in $(eval echo {1..$loops})
        do
            $runCommand
            sleep $inputPeriod
        done

    else
        error="yes"
    fi
else
    error="yes"
fi

if [ $error = "yes" ]
then
    echo "runEvery - runs a command every X seconds for a minute"
    echo "Usage: runEvery.sh <# in seconds < 60> <command to run>"
fi

cron просто не подходит для работы. То, что вам нужно, это скрипт, который работает непрерывно, как показано Ишем.

Вы можете зарегистрировать скрипт как сервис, поместив соответствующий скрипт запуска / остановки в /etc/init.d и включив его.

Или, если у вас есть только учетная запись пользователя, вы можете запустить ее в сеансе экрана. Тогда вы даже можете посмотреть вывод для диагностики ошибок.

Ваш ответ на вопрос