Unix / Windows, Настройка фонового процесса? из кода PHP - PullRequest
0 голосов
/ 13 февраля 2012

Итак, я нашел функцию из http://php.net/manual/en/function.exec.php

function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
    pclose(popen("start /B ". $cmd, "r")); 
}
else {
    exec($cmd . " > /dev/null &");  
}
}

Использование Windows:

pclose(popen('start /B php path/to/background_cron.php', 'r'));

Использование Unix:

exec('php path/to/background_cron.php >> path/to/background_error.log &')

Но когда эти строкина самом деле ничего не происходит (после ожидания около 5 минут).Я делаю что-то неправильно?перед активацией этих строк у меня есть file_exists, проверяющий, существует ли мой путь / to / background_cron.php, и если нет, он выдаст ошибку.

На живом Unix-сервере все разрешения для папокустановите для записи, чтения, выполнения для владельца, группы, общедоступного (0755) и разрешения для файлов установлены для чтения для владельца, группы, общедоступного (644).Background_log появляется пустым после выполнения команды unix, он создает 4 новые пустые строки (\ n), но не возвращает никаких ожиданий

1 Ответ

2 голосов
/ 13 февраля 2012

В Windows немного странно то, что веб-сервер работает от имени другого пользователя, он запускает приложения в своем пользовательском пространстве, а не на рабочем столе.

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

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

Будьте осторожны, вы не создаете дыр в безопасности, позволяя веб-серверу запускать произвольный код.

...