Как запустить php linux
Покинул форум
Сообщений всего: 83
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Господа подскажите как запустить php скрипт с правами root?
Образно написал скрипт.
Скрипт блокирует внешний IP адрес 10.10.10.10 в фаерволе (если его выполнит root)
Сам скрипт (как пример):
$a = passthru ( «/sbin/iptables -A INPUT -s 10.10.10.10 -j DROP» ) ;
print «OUT: \n » ;
Дал root биты SUID и SGID, но при выполнение скрипта другим юзеров он выводит ошибку что мол нужны права root пользователя — то есть выводит ошибку так если бы юзер сам выполнил бы команду «iptables» без скрипта.
Это показывает что скрипт выполняется с правами пользователя. Скажите можно ли сделать так чтобы скрипт исполнялся с правами root??
PS Вопросы безопасности пока опустим.
(Отредактировано автором: 05 Января, 2009 — 19:01:31)
Отправлено: 05 Января, 2009 — 19:39:15
Может плхо сточки зрения безопасности и туповато, но тем не менее:
1. Создаем daemon коорый запускается от rootа в самой системе который выполняет команды если надо от пользоватлея
2. Тот PHP-скрипт котлорый вы запускаете передает UNIX-сигнал указаннолму daemonу и он выполняет то что надо
Иглгда такой механихм очень полезный
(Отредактировано автором: 05 Января, 2009 — 19:41:58)
Отправлено: 08 Января, 2009 — 09:54:27
Покинул форум
Сообщений всего: 83
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
То есть обязательной составляющей должен быть демон запущенный от root?
Реально поднять демона php (есть ли модули какие либо)?
Сам замысел запуска подобного скрипта не для живых пользователей, а для такой системы:
На сайта производятся, какие-то условия, и скрипт на сайте запускает скрипт уже внутри системы (через уник команду).
Но скрип в системе должен иметь root права для выполнения.
PS понятно что у меня не хватает знание в этой области, поэтому я не претендую на готовое решение, мне лишь нужна информация для последующего поиска изучения (что и где искать).
Поэтому буду рад любой информации чтобы получить начальное представление.
Отправлено: 08 Января, 2009 — 12:51:16
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin
Помог: 707 раз(а)
——
Есть в мире две бесконечные вещи — это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Как запустить PHP-скрипт от обычного пользователя с помощью Cron
Cron — мощная утилита для планирования заданий на основе времени в Unix-подобных операционных системах, включая Linux. Он работает как демон и может использоваться для планирования заданий, таких как команды или сценарии оболочки, для выполнения резервного копирования, планирования обновлений и многого другого, которые периодически и автоматически запускаются в фоновом режиме в определенное время, даты или интервалы.
Одним из ограничений cron является то, что он предполагает, что система будет работать вечно; поэтому он подходит для серверов, отличных от настольных компьютеров. Кроме того, вы можете запланировать задачу на заданное или более позднее время, используя команды «at» или «batch»: но задача запускается только один раз (она не повторяется).
В этой статье мы объясним, как разрешить обычному системному пользователю запускать или выполнять PHP-скрипт через планировщик заданий cron в Linux.
Вы можете планировать задания с помощью программы crontab (CRON TABle). У каждого пользователя может быть свой собственный файл crontab, состоящий из шести полей для определения задания:
- Минута — принимает значения от 0 до 59.
- Час — принимает значения от 0 до 23.
- День месяца – сохраняет значения в диапазоне от 1 до 31.
- Месяц года – сохраняет значения от 1 до 12 или январь-декабрь, вы можете использовать первые три буквы названия каждого месяца, например, январь или июнь.
- День недели — содержит значения от 0 до 6 или вс-сб. Здесь также можно использовать первые три буквы названия каждого дня, т. е. вс или ср.
- Команда — команда, которую нужно выполнить.
Чтобы создать или отредактировать записи в собственном файле crontab, введите:
$ crontab -e
И чтобы просмотреть все ваши записи crontab, введите эту команду (которая просто напечатает файл crontab в стандартный вывод):
$ crontab -l
Однако, если вы являетесь системным администратором и хотите выполнить сценарий PHP от имени другого пользователя, вам необходимо запланировать его в файле /etc/crontab или в файле crontab пользователя root, которые поддерживают дополнительное поле для указания Имя пользователя:
$ sudo vi /etc/crontab
И запланируйте выполнение своего PHP-скрипта следующим образом: укажите имя пользователя после раздела времени.
0 0 * * * tecmint /usr/bin/php -f /var/www/test_site/cronjobs/backup.php
Приведенная выше запись запускает скрипт /var/www/test_site/cronjobs/backup.php каждый день в полночь от имени пользователя tecmint.
Если вы хотите автоматически выполнять вышеуказанный скрипт каждые десять минут, добавьте следующую запись в файл crontab.
*/10 * * * * tecmint /usr/bin/php -f /var/www/test_site/cronjobs/backup.php
В приведенном выше примере */10 * * * * указывает, когда должно произойти задание. На первом рисунке показаны минуты — в этом сценарии каждые \десять\ минут. Остальные цифры показывают, соответственно, час, день, месяц и день недели.
Вы также можете прочитать следующие статьи по теме.
- Использование сценариев оболочки для автоматизации задач обслуживания системы Linux
- 12 полезных способов использования командной строки PHP, которые должен знать каждый пользователь Linux
- Как запускать PHP-коды в терминале Linux
- 30 полезных команд Linux для системных администраторов
Вот и все! Мы надеемся, что вы найдете эту статью полезной. Если у вас есть какие-либо вопросы или дополнительные идеи, которыми вы можете поделиться по этой теме, используйте форму комментариев ниже.
Все права защищены. © Linux-Console.net • 2019-2023
Как запустить php скрипт на сервере linux, что бы всегда работал?
У меня есть скрипт который нужно запустить на долго не в одной сессии, я запускаю его с помощью команды php путь к директории. Но опять же, так он будет работать только пока открыта сессия. я слышал что нужно делать так, php путь -> console.log(например). Помогите буду благодарен.
- Вопрос задан более трёх лет назад
- 2543 просмотра
Комментировать
Решения вопроса 5
PHP, Golang. https://github.com/index0h
nohup php /path/to/file.php &
Ответ написан более трёх лет назад
Нравится 4 2 комментария

Вы тут перестраховались. Достаточно либо nohup, либо & после команды 🙂
Saboteur @saboteur_kiev Куратор тега Linux
Дмитрий Шицков: & недостаточно
iOS Программист, 3д печатник
screen -dmS command
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

Можно использовать gearman
Ответ написан более трёх лет назад
Нравится 1 2 комментария

Никогда не задумывался о такой возможности, пока вопрос не задали.
Штука интересная. Для каких целей ее используют вообще?

Если Вам нужно запускать длительные php-скрипты, а ждать не хочется. Запустил и ждешь ответа воркера. Можно сделать много воркеров и запускать параллельные задачи.
что бы всегда работал посмотрите на supervisor и создайте простой конфиг.
тогда вам не придется каждый раз в сессии запускать скрипт ну и вообще беспокоится что он не запущен.
[program:test] command=/usr/bin/php /home/user/test.php process_name=%(program_name)s autorestart=true redirect_stderr=true stopsignal=KILL killasgroup=true stdout_logfile=/var/log/supervisor/test.log stdout_events_enabled=false loglevel=warn user=user environment=APPLICATION_ENV=testing
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Виктор Таран @shambler81 Куратор тега Linux
как правило такие тяжелые скрипты запускают на кроне, поскольку они периодичны.
А там уже через
10 * * * * /usr/bin/wget -O — -q site.ru/import.php
В таком случае у тебя и движок нормально подключится, если он там есть.
Ответ написан более трёх лет назад
Тогда уж так
10 * * * * php /var/www/site.ru/import.php
Смысл дергать web-сервер для фоновой задачи.

Виктор Таран @shambler81 Куратор тега Linux
смысл есть притом большой, если ты работаешь с движком например битрикс, и запускаешь импорт, с консоли php файл не подключит ядро, а следовательно не сработает, в таком же случае через веб сервер он сработает валидно.
Виктор Таран: как раз wget для частного случая с битрикс. Я не знаю его тонкостей, но обычно ядро фреймворка можно подключить через include и далее работать уже как обычно. При необходимости прописать глобальные переменные, чтобы ядро думало, что запрос идет от браузера.
Настройка и запуск cron на веб-сервере
Cron — это программное обеспечение для настройки автоматического выполнения заданий (скриптов) в Unix/Linux подобных системах: Centos, Debian, Ubuntu и других. Этот планировщик задач работает аналогично во всех версиях операционных систем.
Добавить скрипт в Cron можно через специальный файл «crontab», содержащий список заданий для выполнения.

Пример пустого файла crontab
Как задавать время в Cron
Чтобы правильно добавить задание сначала указывается время и периодичность и в конце путь к исполняемому скрипту.
- минута (0-59);
- час (0-23);
- день (1-31);
- месяц (1-12);
- день недели (0-6);
- путь к исполняемому файлу.
Все значения указываются через пробел и при необходимости можно вводить множество значений через запятую.

Пример
Строка следующего вида подразумевает выполнение команды каждый день в 7 утра и 7 вечера:
0 7,19 * * * home/user1/script.sh
Настройка Cron в ISPmanager
Настроить Cron на хостинге проще всего через панель управления. Для примера разберем как производится настройка планировщика в ISPmanager 4.

- Открываем панель управления ISPmanager и переходим в «Планировщик» в разделе «Главное». Далее создаем новое задание, нажимая на кнопку «Создать».
- Заполняем поля в открывшемся редакторе и нажимаем «ОK»:
- Команда — здесь указываем полный путь (директорию) к исполняемому файлу программы или готовому рабочему скрипту.
- Описание — по желанию можно добавить краткое описание выполняемого задания.
- Расписание— добавляем расписание с возможностью выбора режима. Режим «Базовый» — с выбором доступных вариантов и «Экспертный» — самостоятельная настройка.

- Eсли есть возможность, нужно настроить получение отчетов по запуску заданий на почтовый адрес пользователя. Для этого открываем «Планировщик» → «Настройки» → «Адрес e-mail» и указываем адрес почты для получения. После чего нужно убедиться, что в настройках не стоит галочка напротив «Не отправлять отчет по e-mail».

Настройка Cron для запуска PHP-скрипта
В некоторых случаях бывает так, что автоматическое выполнение PHP-скрипта невозможно. Чаще всего подобные ошибки случаются при запуске PHP-скрипта через локальный интерпретатор. В таких случаях требуется запустить Cron вручную, для чего лучше всего использовать программу wget. В приведенном ниже примере «example.com» нужно заменить на реальный путь к вашему PHP-файлу.
0 7,19 * * * /usr/bin/wget -O - -q -t 1 ‘http://example.com/file.php’
Полезные примеры
Разберем уже приведенный выше пример, немного изменив параметры:
0 7,19 3* 7 /usr/bin/wget -O - -q -t 1/ / ‘http://example.com/file.php’ /dev/null/2>&1
Запуск PHP-скрипта будет происходить в 7:00 и 19:00 каждого воскресенья и 3 числа каждого месяца (совпадения дня недели и числа не имеют значения).
/dev/null/2>&1 — эта команда Cron добавляется в конце сценария (строки), для выполнения скрипта в фоновом режиме без уведомлений.
Помимо этого, можно добавлять другие полезные опции в конце строки планировщика Cron. Как например, для отладки запускаемого скрипта, нужен лог-файл выполнений.
То есть, если мы хотим настроить вывод результатов запуска задания Cron в определенный файл, можно изменить команду следующим образом:
0 7,19 3* 7 /usr/bin/wget -O - -q -t 1 ‘http://example.com/file.php’ > /yourdirectory/log.txt
Просмотрев такой лог, можно понять причину, почему Cron не выполняет скрипт.
Надежный хостинг для сайта. 14 дней — бесплатно!
