У меня есть пять рабочих beanstalk, написанных на PHP, каждый из них наблюдает за определенной трубкой и обрабатывает данные, в основном отправляя электронные письма, электронные письма электронной почты, электронные письма с электронными письмами и подписью, каждый рабочий разговаривает с базой данных и получение некоторых данных перед отправкой электронных писем.Рабочие рабочие beanstalk висят на сервере
Я попытался запустить рабочих, используя «Экран» и «crontab», и сейчас я пытаюсь «супервизор», но независимо от того, что я использую, сервер зависает, и он дает мне «ошибку распределения памяти», поэтому мне нужно перезагружайте сервер каждый раз, мой локальный сервер занимает 8 ГБ памяти, что я должен учитывать при запуске рабочих, например, в памяти процессора, может ли кто-нибудь указать мне, где искать?
здесь рабочий образец для отправки сообщений электронных писем
public function actionMessages() {
$pheanstalk = new Pheanstalk("127.0.0.1");
while (true) {
// worker (performs jobs)
$job = $pheanstalk
->watch('MessageEmail')
->ignore('default')
->reserve();
$jobData = json_decode($job->getData(), true);
$usersObj = new Users();
$circlesObj = new Circles();
$messageId = NULL;
$listUsers = [];
$finalDataArray = [];
$finalDataUsersArray = [];
foreach ($jobData['circlesIds'] as $circle) {
// get users in lists
foreach ($jobData['lists'] as $list) {
$listsObj = new Lists();
$listUsers = $listsObj->getListInfoWithOutsiders($list);
}
$circleInfo = $circlesObj->getBasicInfoById($circle);
if (sizeof($listUsers) > 0) {
// send emails to the list
foreach ($listUsers as $userInListId) {
// check if the user is circlu or outsider
if ($userInListId['outsider']) {
$circlesProfilesObj = new CirclesMembersManagement();
$userInfo = $circlesProfilesObj->getMemberEmailById($userInListId['user_id']);
$finalDataArray[] = ['circle' => $circleInfo, 'email' => $userInfo['email'],
'post' => ['html' => $jobData['messageText'], 'date' => $jobData['postDate']]];
// send email
} else {
$userInfo = $usersObj->getUserEmailById($userInListId['user_id']);
// insert the main message
$messages = new Messages();
$messageId = $messages->addCircleMessage($jobData['messageText'], $userInListId['user_id'], $circleInfo['id']);
$finalDataArray[] = ['circle' => $circleInfo, 'email' => $userInfo['email'],
'post' => ['html' => $jobData['messageText'], 'date' => $jobData['postDate']]];
}
}
EmailHelper::sendMessageEmail($finalDataArray);
}
// send messages to the the users
if (sizeof($jobData['users']) > 0) {
foreach ($jobData['users'] as $userId) {
// insert the main message
if ($messageId) {
// send direct message
$userMessagesObj = new UserMessages();
$userMessagesObj->sendCircleMessage($circleInfo['id'], $userId, $messageId);
} else {
$messages = new Messages();
$messages->addCircleMessage($jobData['messageText'], $userId, $circleInfo['id']);
}
$userInfo = $usersObj->getUserEmailById($userId);
$finalDataUsersArray[] = ['circle' => $circleInfo, 'email' => $userInfo['email'],
'post' => ['html' => $jobData['messageText'], 'date' => $jobData['postDate']]];
// send email
}
EmailHelper::sendMessageEmail($finalDataUsersArray);
}
}
$pheanstalk->delete($job);
}
}
Заранее спасибо
Кажется, проблема с PHP-кодом, а не с планировщиком заданий, который вы используете для его запуска. Вероятно, вы должны добавить к своему сообщению php-код, если это возможно. –
Хорошо, я добавлю пример рабочего –
PHP будет для кого-то другого, чтобы проверить, потому что я не эксперт по PHP. Сказав это, кажется, что есть какое-то время (правда) без перерыва/выхода. Разве это не будет выполняться бесконечно? –