[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запуск скрипта в background-e
Страницы: 1, 2
philya
Цитата
Тяжелый скрипт все равно будет занимать воркер апача.
На что это повлияет?
killer8080
Цитата (philya @ 7.03.2014 - 20:55)
Цитата
Тяжелый скрипт все равно будет занимать воркер апача.
На что это повлияет?

Как это на что. Апач это вебсервер, у него другое назначение, каждый воркер обслуживает запросы от сокета. Принял запрос, максимально быстро выдал контент, ожидаем следующий запрос. Чем дольше сервер возвращает контент, тем хуже, тем меньше запросов способен обработать вебсервер. А ты предлагаешь на длительной время отхавать у него целый воркер :)
А если подобных фоновых задач не одна, а несколько? Все шансы задосить сервак :)

По теме, поскольку нужно непросто запустить задачу в фоне, но и еще и от имени другого пользователя, имхо самым оптимальным способом будет стартовать скрипт бинарником с suid-ом. Как вариант:
starter.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>


int main() {
signal(SIGHUP, SIG_IGN);
int pid = fork();
if(pid != 0) {
printf("background task started pid: %d\n", pid);
exit(0);
}

setsid();
system("/usr/bin/php -f /path/to/task.php >/dev/null 2>&1");
exit(0);
}

компилим бинарник
# gcc -o starter starter.c

устанавливаем владельцем файла пользователя, от чьего имени его нужно запускать, например root
# chown root:root starter

устанавливаем suid бит
# chmod u+s starter

теперь запустить задачу можно просто
system('/path/to/starter');

путь к php скрипту задачи зашиваем жестко в бинарник, передавать аргументом нельзя в целях безопасности, так же все исполняемые задачей скрипты, не должны быть доступны на запись кому попало, владельцем на них всех должен быть выставлен root, или тот юзер от имени которого они запускаются, права на запись соответственно только для владельца. Это кстати также касается запуска задачи через ssh, который хотел применить ТС.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.