php выполнить скрипт bash

Запустите bash-скрипт из PHP-скрипта

Я использую сервер Apache на CentOS и мне нужно запустить несколько скриптов bash со страницы PHP. Выполнение команд, которые НЕ требуют разрешения на запись или выполнение из файла PHP, работает нормально (например, shell_exec (‘ls / var / www / html / scripts /’)), но у меня проблема с запуском команд, которым нужно разрешение на запись или выполнение. Например, эта команда ничего не делает:

Я сделал пользователя Apache владельцем и предоставил необходимые разрешения для каталога скриптов:

и файл test.sh как видно, но блокировки не было.

Я также попытался выполнить команду sudo в файле PHP и добавил строку ниже в конец файла Sudoers, но ничего не изменилось.

Также я проверил PHP safe_mode, который выключен, и в файле php.ini нет ограничений:

Ваша помощь будет высоко ценится.

Я отредактировал мой скрипт bash и добавил Судо как ниже:

Теперь, когда я запускаю файл как пользователь apache, используя эту команду, он запускается успешно:

Но через веб-страницу php он запускает только echo «Hi from test.sh»; линия. Когда я проверяю логи, ниже приведены строки для запуска команды:

И сгенерированный журнал при запуске с веб-страницы php:

Отсутствует pam_unix (su: session) открывать и закрывать.

Решение

Я нашел, в чем проблема. Это было из-за возможности Linux SELinux. Эта функция применяет политику наименьших привилегий и запрещает запуск любой ненужной команды в Linux. Сценарий bash успешно работает после отключения этой функции. Для этого отредактируйте файл / etc / selinux / config и измените SELINUX = принудительно на SELINUX = отключено и перезагрузите систему. ЭТО НЕ РЕКОМЕНДУЕТСЯ ПО ПРИЧИНАМ БЕЗОПАСНОСТИ. Вы можете проверить ссылку ниже, чтобы создать только некоторые исключения, а не полностью отключить SELinux.

Источник

Bash скрипт для запуска php скрипта

У меня есть php-скрипт, который я хочу запустить с помощью скрипта bash, поэтому я могу использовать Cron для запуска php-скрипта каждую минуту или около того.

насколько я знаю, мне нужно создать скрипт bash для обработки скрипта php, который затем позволит мне использовать инструмент Cron/таймер.

до сих пор мне сказали, что мне нужно поставить:

в начале моего PHP-скрипта. Я не знаю, что делать дальше.

какие-либо советы? Спасибо.

8 ответов

если у вас установлен PHP в качестве инструмента командной строки (попробуйте выдать php к терминалу и посмотреть, работает ли он), ваш shebang ( #! строка) должна выглядеть так:

поместите это в верхней части скрипта, сделайте его исполняемым ( chmod +x myscript.php ) и сделайте задание Cron для выполнения этого сценария (так же, как вы выполняете сценарий bash).

предыдущий плакат сказал..

если у вас установлен PHP в качестве инструмента командной строки. ваш shebang (#!) строка должна выглядеть так: #!/usr/bin/php

php is /usr/local/php5/bin/php
php is /usr/bin/php
php is /usr/local/bin/php
php is /Library/WebServer/CGI-Executables/php

вам просто нужно установить :

Я уверен, что что-то вроде этого вы ищете:

сохраните это с желаемым именем скрипта (например, runPHP.sh) и дать ему права на выполнение, то вы можете использовать его, как вы хотите.

скрипт bash должен быть примерно таким:

вам нужен исполняемый файл php (обычно находится в /usr/bin) и путь PHP-скрипта для запуска. Теперь осталось только положить этот скрипт в crontab и все готово!

Я debian и выше команды, показывающей мне

надеюсь, что это поможет.

Если вы ничего не делаете в своем скрипте bash, чем запустить php, вы можете просто запустить PHP-скрипт из cron с помощью команды /usr/bin/php /path/to/your/file.РНР.

Источник

Bash-скрипты: начало

Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.

php выполнить скрипт bash

Сценарии командной строки — это наборы тех же самых команд, которые можно вводить с клавиатуры, собранные в файлы и объединённые некоей общей целью. При этом результаты работы команд могут представлять либо самостоятельную ценность, либо служить входными данными для других команд. Сценарии — это мощный способ автоматизации часто выполняемых действий.

php выполнить скрипт bash

Итак, если говорить о командной строке, она позволяет выполнить несколько команд за один раз, введя их через точку с запятой:

На самом деле, если вы опробовали это в своём терминале, ваш первый bash-скрипт, в котором задействованы две команды, уже написан. Работает он так. Сначала команда pwd выводит на экран сведения о текущей рабочей директории, потом команда whoami показывает данные о пользователе, под которым вы вошли в систему.

Используя подобный подход, вы можете совмещать сколько угодно команд в одной строке, ограничение — лишь в максимальном количестве аргументов, которое можно передать программе. Определить это ограничение можно с помощью такой команды:

Командная строка — отличный инструмент, но команды в неё приходится вводить каждый раз, когда в них возникает необходимость. Что если записать набор команд в файл и просто вызывать этот файл для их выполнения? Собственно говоря, тот файл, о котором мы говорим, и называется сценарием командной строки.

Как устроены bash-скрипты

Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:

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

Установка разрешений для файла сценария

php выполнить скрипт bash

Попытка запуска файла сценария с неправильно настроенными разрешениями

Сделаем файл исполняемым:

Теперь попытаемся его выполнить:

После настройки разрешений всё работает как надо.

php выполнить скрипт bash

Успешный запуск bash-скрипта

Вывод сообщений

Вот что получится после запуска обновлённого скрипта.

php выполнить скрипт bash

Вывод сообщений из скрипта

Использование переменных

Переменные позволяют хранить в файле сценария информацию, например — результаты работы команд для использования их другими командами.

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

Существуют два типа переменных, которые можно использовать в bash-скриптах:

Переменные среды

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

php выполнить скрипт bash

Использование переменной среды в сценарии

А что если надо вывести на экран значок доллара? Попробуем так:

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

Теперь сценарий выведет именно то, что ожидается.

php выполнить скрипт bash

Использование управляющей последовательности для вывода знака доллара

Пользовательские переменные

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

Как и в случае с системными переменными, к пользовательским переменным можно обращаться, используя знак доллара:

Вот что получится после запуска такого сценария.

php выполнить скрипт bash

Пользовательские переменные в сценарии

Подстановка команд

Одна из самых полезных возможностей bash-скриптов — это возможность извлекать информацию из вывода команд и назначать её переменным, что позволяет использовать эту информацию где угодно в файле сценария.

Сделать это можно двумя способами.

При втором подходе то же самое записывают так:

А скрипт, в итоге, может выглядеть так:

php выполнить скрипт bash

Скрипт, сохраняющий результаты работы команды в переменной

Математические операции

php выполнить скрипт bash

Математические операции в сценарии

Управляющая конструкция if-then

А вот рабочий пример:

В данном случае, если выполнение команды pwd завершится успешно, в консоль будет выведен текст «it works».

Вот что получается после запуска этого скрипта.

php выполнить скрипт bash

В этом примере, если пользователь найден, скрипт выведет соответствующее сообщение. А если найти пользователя не удалось? В данном случае скрипт просто завершит выполнение, ничего нам не сообщив. Хотелось бы, чтобы он сказал нам и об этом, поэтому усовершенствуем код.

Управляющая конструкция if-then-else

Напишем такой скрипт:

php выполнить скрипт bash

Запуск скрипта с конструкцией if-then-else

Ну что же, продолжаем двигаться дальше и зададимся вопросом о более сложных условиях. Что если надо проверить не одно условие, а несколько? Например, если нужный пользователь найден, надо вывести одно сообщение, если выполняется ещё какое-то условие — ещё одно сообщение, и так далее. В подобной ситуации нам помогут вложенные условия. Выглядит это так:

Сравнение чисел

В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.

В качестве примера опробуем один из операторов сравнения. Обратите внимание на то, что выражение заключено в квадратные скобки.

Вот что выведет эта команда.

php выполнить скрипт bash

Сравнение чисел в скриптах

Значение переменной val1 больше чем 5, в итоге выполняется ветвь then оператора сравнения и в консоль выводится соответствующее сообщение.

Сравнение строк

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

Вот пример сравнения строк в сценарии:

В результате выполнения скрипта получим следующее.

php выполнить скрипт bash

Сравнение строк в скриптах

Вот одна особенность сравнения строк, о которой стоит упомянуть. А именно, операторы «>» и « » как команду перенаправления вывода.

Вот как работа с этими операторами выглядит в коде:

Вот результаты работы скрипта.

php выполнить скрипт bash

Сравнение строк, выведенное предупреждение

Обратите внимание на то, что скрипт, хотя и выполняется, выдаёт предупреждение:

Теперь всё работает как надо.

php выполнить скрипт bash

Она отсортирует строки из файла так:

Если его запустить, окажется, что всё наоборот — строчная буква теперь больше прописной.

php выполнить скрипт bash

Команда sort и сравнение строк в файле сценария

В командах сравнения прописные буквы меньше строчных. Сравнение строк здесь выполняется путём сравнения ASCII-кодов символов, порядок сортировки, таким образом, зависит от кодов символов.

Проверки файлов

Пожалуй, нижеприведённые команды используются в bash-скриптах чаще всего. Они позволяют проверять различные условия, касающиеся файлов. Вот список этих команд.

Эти команды, как впрочем, и многие другие рассмотренные сегодня, несложно запомнить. Их имена, являясь сокращениями от различных слов, прямо указывают на выполняемые ими проверки.

Опробуем одну из команд на практике:

Этот скрипт, для существующей директории, выведет её содержимое.

php выполнить скрипт bash

Вывод содержимого директории

Полагаем, с остальными командами вы сможете поэкспериментировать самостоятельно, все они применяются по тому же принципу.

Итоги

Сегодня мы рассказали о том, как приступить к написанию bash-скриптов и рассмотрели некоторые базовые вещи. На самом деле, тема bash-программирования огромна. Эта статья является переводом первой части большой серии из 11 материалов. Если вы хотите продолжения прямо сейчас — вот список оригиналов этих материалов. Для удобства сюда включён и тот, перевод которого вы только что прочли.

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

Источник

Shell script с root правами из PHP?

с помощью приложения на PHP порождать некие процессы, работающие от конкретного (отличного от пользователя, от которого работает web-сервер) пользователя.

Сейчас, как вы можете догадаться, от apache отпочковываются процессы, работающие под его же пользователем, что естественно не есть гуд по нескольким причинам: 1) если понадобилось ребутнуть apache (или он не дай бог крэшнется сам), то упадут все процессы, порожденные от него 2) кривые права доступа для учетки www-data в связи с тем, что ей тоже нужны права на запуск экземпляров приложения, лежащего вне директории web-сервера. Хватит это терпеть, подумал я…

Был написан shell script, который умеет запускать приложение от конкретного пользователя. Он был протестирован от root-а через консольку — работет. Через PHP выполняем shell_exec(), который запускает наш скрипт с некоторыми параметрами (условно, для простоты понимания, с сетевым портом, который будет слушать экземпляр приложения). Осталось разобраться с правами www-data на запуск скрипта от root-а. Ну так же ж есть sudo, подумал я… Вот тут-то и возникли сложности.

Положим, что бинарник приложения лежит (условно) тут /home/app/bin. Пользователь username, от которого мы собираемся запускать экземпляры, имеет полный доступ (rwx) как к директории так и к бинарнику.

Файлы web-сервера как и положено валяются где-то в /var/www. Apache работает от пользователя www-data.

Shell script лежит (условно) в /var/www/script.sh. Полные права доступа (rwx) к нему имеет только root, все остальные делать с ним ни чего не могут. Он тщательно проверяет входные параметры (существование пути, существование бинарника и другие проверки) и запускает экземпляр приложения следующей командой:
или условно

Остается позволить www-data запускать script.sh от root-а. Ставим sudo,

идем в /etc/sudoers и добавляем:

www-data ALL=(root) NOPASSWD: /var/www/script.sh

По ощущениям этого достаточно и по тем же ощущениям подозрения — слишком просто.

Теперь из PHP вызываем наш скрипт:

Пробуем по другому (через консоль):

Появляется мало ожидаемое приглашение ввести пароль пользователя www-data:
[sudo] password for www-data:

А NOPASSWD на что? Да и вообще какого хрена пароль у www-data? 🙁

Собственно, что я делаю не так?

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

Источник

Как запустить bash скрипт из php?

Здравствуйте. Слоижлась ситуация, что надо запустить bash скрипт из php. Да, не секьюрно. Этим рулит jalkit.

Соединение устанавливается. Но скрипт не выполняется.

И еще, как запустить скрипт от sudo через php?
Спасибо.

php выполнить скрипт bash

php выполнить скрипт bash

php выполнить скрипт bash

php выполнить скрипт bash

Вопрос еще такой. Как запустить скрипт с sudo?

php выполнить скрипт bash

Адрес и порт точно правильный?
обычно sshd демон висит не на 29937, может вы не туда подключаетесь?
Попробуйте выполнить команду попроще, типа whoami или ‘echo test >> /tmp/test.txt’

Чтобы выполнить sudo, нужно, например, разрешить пользователю выполнять sudo без запроса пароля, что делается настройкой /etc/sudoers. Добавьте в конце файла для этого юзера строку:
username ALL=NOPASSWD: ALL

теперь просто sudo и все.

Если подключиться к серверу самому под этим пользователем, ваша команда запускается?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *