Запустить php от имени пользователя

exec

Если параметр output указан, то массив будет заполнен строками вывода программы. Завершающие пробелы, такие как \n , не будут включены в массив. Обратите внимание, что если массив уже содержит какие-либо элементы, то exec() добавит новые элементы в конец массива. Если же вы не хотите, чтобы функция добавляла новые элементы в конец, вызовите unset() на этом массиве, прежде чем передать его в exec() .

Если аргумент result_code присутствует вместе с output , тогда статус возврата выполненной команды будет записан в этой переменной.

Возвращаемые значения

Последняя строка из результата команды. Если требуется выполнить команду и получить все данные команды без какой-либо обработки, используйте функцию passthru() .

Возвращает false в случае возникновения ошибки.

Для получения результата выполнения команды, убедитесь, что параметр output инициализирован и используется.

Ошибки

Выдаёт ошибку уровня E_WARNING , если функция exec() не может выполнить команду command .

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

Список изменений

Версия Описание
8.0.0 Если параметр command не указан или содержит нулевые байты, функция exec() теперь выбрасывает исключение ValueError ; ранее она выдавала ошибку уровня E_WARNING и возвращала false .

Примеры

Пример #1 Пример функции exec()

// выводит имя пользователя, от имени которого запущен процесс php/httpd
// (применимо к системам с командой «whoami» в системном пути)
$output = null ;
$retval = null ;
exec ( ‘whoami’ , $output , $retval );
echo «Вернёт статус $retval и значение:\n» ;
print_r ( $output );
?>

Результатом выполнения данного примера будет что-то подобное:

Вернёт статус 0 и значение: Array ( [0] => cmb )

Примечания

Если вы собираетесь передавать функции пользовательские данные, используйте функции escapeshellarg() или escapeshellcmd() для того, чтобы пользователи не смогли обмануть систему, запустив произвольную команду.

Замечание:

Если вы собираетесь использовать эту функцию в программе, работающей в качестве демона, убедитесь, что стандартный вывод функции направлен в файл или другой поток, в противном случае PHP зависнет вплоть до конца выполнения программы.

Замечание:

В Windows функция exec() стартует cmd.exe для запуска команды. Если вы хотите запустить внешнюю программу без запуска cmd.exe, то используйте функцию proc_open() с установленной опцией bypass_shell .

Смотрите также

  • system() — Выполнить внешнюю программу и отобразить вывод
  • passthru() — Выполнить внешнюю программу и отобразить необработанный вывод
  • escapeshellcmd() — Экранировать метасимволы командной строки
  • pcntl_exec() — Запустить указанную программу в области текущего процесса
  • Оператор исполнения

User Contributed Notes 20 notes

This will execute $cmd in the background (no cmd window) without PHP waiting for it to finish, on both Windows and Unix.

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

(This is for linux users only).

We know now how we can fork a process in linux with the & operator.
And by using command: nohup MY_COMMAND > /dev/null 2>&1 & echo $! we can return the pid of the process.

This small class is made so you can keep in track of your created processes ( meaning start/stop/status ).

You may use it to start a process or join an exisiting PID process.

// You may use status(), start(), and stop(). notice that start() method gets called automatically one time.
$process = new Process ( ‘ls -al’ );

// or if you got the pid, however here only the status() metod will work.
$process = new Process ();
$process . setPid ( my_pid );
?>

// Then you can start/stop/ check status of the job.
$process . stop ();
$process . start ();
if ( $process . status ()) echo «The process is currently running» ;
>else echo «The process is not running.» ;
>
?>

/* An easy way to keep in track of external processes.
* Ever wanted to execute a process in php, but you still wanted to have somewhat controll of the process ? Well.. This is a way of doing it.
* @compability: Linux only. (Windows does not work).
* @author: Peec
*/
class Process private $pid ;
private $command ;

public function __construct ( $cl = false ) if ( $cl != false ) $this -> command = $cl ;
$this -> runCom ();
>
>
private function runCom () $command = ‘nohup ‘ . $this -> command . ‘ > /dev/null 2>&1 & echo $!’ ;
exec ( $command , $op );
$this -> pid = (int) $op [ 0 ];
>

public function setPid ( $pid ) $this -> pid = $pid ;
>

public function getPid () return $this -> pid ;
>

public function status () $command = ‘ps -p ‘ . $this -> pid ;
exec ( $command , $op );
if (!isset( $op [ 1 ]))return false ;
else return true ;
>

public function start () if ( $this -> command != » ) $this -> runCom ();
else return true ;
>

public function stop () $command = ‘kill ‘ . $this -> pid ;
exec ( $command );
if ( $this -> status () == false )return true ;
else return false ;
>
>
?>

Источник

Как запустить 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, введите эту команду (которая просто напечатает файл crontab в стандартный вывод):

Однако, если вы являетесь системным администратором и хотите выполнить сценарий PHP от имени другого пользователя, вам необходимо запланировать его в файле /etc/crontab или в файле crontab пользователя root, которые поддерживают дополнительное поле для указания Имя пользователя:

И запланируйте выполнение своего 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 * * * * указывает, когда должно произойти задание. На первом рисунке показаны минуты — в этом сценарии каждые \десять\ минут. Остальные цифры показывают, соответственно, час, день, месяц и день недели.

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

  1. Использование сценариев оболочки для автоматизации задач обслуживания системы Linux
  2. 12 полезных способов использования командной строки PHP, которые должен знать каждый пользователь Linux
  3. Как запускать PHP-коды в терминале Linux
  4. 30 полезных команд Linux для системных администраторов

Вот и все! Мы надеемся, что вы найдете эту статью полезной. Если у вас есть какие-либо вопросы или дополнительные идеи, которыми вы можете поделиться по этой теме, используйте форму комментариев ниже.

Источник

Читайте также:  Insert method in string in java
Оцените статью